Sergey
Получайте из модалки ссылку
Sergey
Или то что надо для её генерации
Sergey
По нажатию кнопки ОК в модалке передавайте модель в $mdDialog.hide({propA:....})
Sergey
Там где вы вызывали $mdDialog.show({...}).then((model) => {const url = .....; $state.go(url)});
Sergey
$mdDialog.cancel не возвращает данные, он резолвит промис со значением "ошибка, отклонено, отмена"
pa[aad
https://github.com/typestack/class-validator
Igor
Sergey
Sergey
Oleg
Ramazan
всем привет
Ramazan
народ подскажите плиз как <select custom-directive></select>
Ramazan
отслеживать изменения значение
Ramazan
scope.$watch(atrrs.ngModel - не хватает так как он срабатывает только когда фокус меняется или когда выбираем значение из списка, у меня select с фильтром там можно вводить символы
pa[aad
Бот ?
Sergey
Экспресс-тест Тьюринга))
Rem1te
Sergey
@jashka_jashka тут спам
Андрей
плз, кто может помочь залить проект на гит пейджес, уже не знаю что и делать
pa[aad
есть же куча мануалов по этому
pa[aad
одна ветка для кода другая для билда
ветка которая будет показываться указывается в настройках
pa[aad
задолбали боты, ща будет зачистка
Евгений
Есть кто живой?
Артур
+
Евгений
Не подскажите пару ответов на вездесущий вопросы?
Rem1te
Евгений
К делу:
1) Есть контроллер, есть у контроллера директива...
Куда передать данные правильнее в директиву (массив данных) или в контроллер потом передать через аттрибут
2) Данные передаються через WebSocket, и инногда вэбсокет глючит
Как правельнее всего было-бы организовать обработку на морде (frontend) что доступны данные будут только если данные получены. Сейчас это реализованно на Promise API
Евгений
Примеры кода:
WebSocket Client:
// Настройки для WebSocket =)
app.run(['$rootScope', $rootScope => {
let wsurl = document.location.href.replace(/^(http)(s?:\/\/([^\/]+)).*/, 'ws$2/echo');
let wstry = 0;
let websocketConnection = null;
let websocketCallbacks = {}; // TODO:: Create message expiration! [_id : [onsucces,onerror,dateNow]]
$rootScope.websocketReady = false;
// WebSocket Callback Parser
$rootScope.$on('ws:raw', (event, msg) => {
// e.data instanceof ArrayBuffer
// e.data instanceof Blob
// typeof e.data === "string"
if (typeof msg === "string" && msg[0] === '{' && msg.slice(-1) === '}') {
try {
let response = JSON.parse(msg);
if ((response.action === "callback") && (typeof websocketCallbacks[response._id] !== "undefined")) {
let [onsuccess, onerror, expired] = websocketCallbacks[response._id];
delete websocketCallbacks[response._id];
if (typeof response.error === "undefined") {
onsuccess(response.data);
} else {
onerror(new Error("ws:error: " + response.error));
}
}
}
catch (err) {
}
}
});
// WebSocket Handler/Reloader
function WebSocketReloader() {
let ws = new WebSocket(wsurl);
ws.onopen = event => {
wstry = 0;
websocketConnection = ws;
$rootScope.$apply(function () {
$rootScope.websocketReady = true;
});
$rootScope.$emit('ws:ready', event);
};
ws.onclose = event => {
websocketConnection = null;
$rootScope.$apply(function () {
$rootScope.websocketReady = false;
});
$rootScope.$emit('ws:close', event);
window.setTimeout(WebSocketReloader.bind(this), (wstry<5 ? (++wstry*1000) : 5000));
};
ws.onmessage = event => {
$rootScope.$emit("ws:raw", event.data);
};
ws.onerror = event => {
$rootScope.$emit('ws:error', event);
};
}
WebSocketReloader(wsurl);
$rootScope.wsCall = (name, ...args) => {
return new Promise((onsuccess, onerror) => {
let _id = (d => [d.getUTCFullYear(),d.getUTCMonth()+1,d.getUTCDate(),d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),d.getUTCMilliseconds()].join('/')).call({}, new Date());
websocketCallbacks[_id] = [onsuccess, onerror, new Date()];
if (websocketConnection != null) {
websocketConnection.send(JSON.stringify({
"action": "call",
"call": name,
"_id": _id,
"attr": args
}));
} else {
let interval;
interval = window.setInterval(function () {
if (!$rootScope.websocketReady) return;
window.clearInterval(interval);
$rootScope.wsCall(name, ...args)
}, 1000);
}
})
};
}]);
Евгений
WebSocket Request:
$scope.$root.wsCall('order.create.new')
.then((data) => $scope.$apply((data) => {
$scope.order.create.data = data;
}))
.catch(err => console.error(err));
Евгений
Где (Запрос):
{
action: "call", /// Процедура со стороны сервера
_id: "уникальный id запроса", //
call: "имя.функции", // например 'order.create.new'
attr: "что либо",
}
Ответ:
{
"action": "callback", // Определяет что это ответ на call
"_id": "8797807807801", // Тот-же id что и _id запроса - то-есть логический это ответ для Promise.then
"data": "какой либо результат" // Данные ответа
}
Евгений
Вопрос больше реторический - как красиво сделать запрос/ответ/ошибка
Евгений
Что лучше делать если ошибка - как сделать повтор и красивый диалог повторов
Sergey
Sergey
А по поводу кросиво сделать, может быть елси скрестить https://cvuorinen.net/2016/05/using-rxjs-observables-with-angularjs-1/ с https://github.com/ohjames/rxjs-websockets
Sergey
Сам я конечно так не делал, но выглядит как выполнимая задача
Sergey
Туда просто так и просятся Observable
Stas
подскажите есть urlPattern:
'/property/:propertyId/reservation-source(/:id)/trashed()';
как для трешеда устьановить дефолтное значение по умолчанию?
Aleksandr
Всем привет. У меня вопрос по либе ng-metadata. Код пишется на TS.
Пытаюсь создать директиву аналогичную ng-if. Во втором ангуляре делается на раз. В первом тоже можно. А вот ng-metadata не получается.
Я попробовал использовать привемр из первого, но не взлетает. Если есть у кого идеипомогите плиз.
https://stackoverflow.com/questions/20325480/angularjs-whats-the-best-practice-to-add-ngif-to-a-directive-programmatically (edited)
pa[aad
Aleksandr
Она используется в проекте чтобы одновременно поддерживать typescript и js со старым кодом
pa[aad
pa[aad
и зачем изобретать заново ng-if ?
Aleksandr
ну как в примере такая же фигня с доступом. Чтобы не прокидывать в 10 компонентов значение, что доступ закрыт и использовать как ng-if=‘$ctrl.hasAccess’
А просто повесить на любой компонент директиву my-aceess. И элемент не отрендеритьяс если доступ запрещен.
pa[aad
Sergey
Sergey
И получилось дикое говно, вот)
pa[aad
export default function WhenUserDirective(AuthService: AuthService) {
'ngInject';
return {
restrict: 'A',
link: (scope, element, attrs) => {
const watcher = scope.$watch(() => AuthService.isRest(), (val) => {
if (val) {
element.hide();
} else {
element.show();
}
});
scope.$on('destroy', () => {
watcher();
});
}
}
}если хотите что бы контент удалялся это можно сделать, но тогда вам нужно еще его и вставить и хранить где-то
pa[aad
директиву вешаю на блоки где мне нужно таким образом
<div only-user>... тут что-то html</div>
Aleksandr
hide() show() это же просто display: none. Элемент все равно отрендериться.
Sergey
pa[aad
Sergey
Ну насколько я понял код, оно толкьо одно значение проверяет из сервиса
Sergey
Понятно) У меня проверок разных десятки, как их бы так красиво завернуть я так и не придумал
Sergey
А просто исходники ng-if нельзя скопировать в директиву?)
Aleksandr
Ребят мы не пишем на js. А пишем на TS какбы пользуясь всеми фишками ангуоляр 2. Это все предоставляет ng-metadata, компилируя потом все это добро в первый ангуляр. Поэтому хрен поймешь как это реализовать
Sergey
А тс он какой-то волшебный, к жс никак не относится? Ну смотрите что там декоратор генерирует)
pa[aad
Dmitry
Всем привет.
Есть родителский div с ng-swipe-left и ng-swipe-right
внутри есть дочерний div.
Как отменить ng-swipe-left и ng-swipe-right на дочернем?
Ԓ̵̟̻̪̥͍̹̦̼͑̋́̽̎͒̑͆̚͜͜о̶̢̛̖̞̬̥̪͎̖̗̗̝̯̫͈̜́̋͋͆̒̔͊̍̑̄͝р̷̥̠͓̘͎̑̋̚д̶͒́
Talgatio
Привет всем! как в ng-options подставить значение из ng-model??
Talgatio
Полчучается такая структура. В зависимости от стейта у меня ng-model может быть пустой, а может с серевера прилетать данные.
Так вот, когда с сервера прилетают данные как их подставить в ng-options, чтобы стояли данные вместо заглушки ?
http://prntscr.com/ku076c
Sergey
Talgatio
Sergey
Попробуйте track by заюзать
Talgatio
Sergey
Бидулька
Talgatio
У меня меняется ng-model, но option остаётся в том же состоянии
Talgatio
Тоесть ng-model принимает значение с сервера, но option остаётся прежним
Manar
а vm.sports обновляешь?
Sergey
А если принудительно $apply позвать через $timeout?
Sergey
Sergey
Чёто не получается повторить
Sergey
Сможете воспроизвести?
Sergey
Ну или дело как раз в timeout, но в планкре хрен сделаешь по-другому асинхронщину
Talgatio
Sergey
Ну вот. А то не буду, не вариант))
Igor
всем привет) кто подскажет как сделать поле для ввода дробного числа?