

Михаил
08.10.2016
10:02:48
Народ, уже всю голову сломал, помогите какими-нибудь мыслями, пожалуйста.
Есть ng1.5.5, банальный компонент, внутри его контроллера банальная функция:
var $ctrl = this;
function open() {
$ctrl.is_open = true;
}
В шаблоне на $ctrl.is_open завязан ng-show.
Если я вызываю эту функцию из самого компонента (просто хардкодом из контроллера или по ng-click на каком-нибудь элементе) - то все нормально.
А вот если она вызывается коллбеком из местной реализации Event Emitter'a (навроде ee.on( 'my-event', open )), то начинается интересное:
- функция отрабатывает
- присваивает $ctrl.is_open = true;
- нифига не обновляет шаблон
В принципе, логично бы все валить на EventEmitter но:
1) в нем нет ничего замороченного, он просто проходит по массиву подписчиков и вызывает коллбеки
2) функцию то он вызывает нормально
3) в куче аналогичных мест - все работает как часы
$scope.$apply(); и прочую подобную магию применял, дебаггером по коду ходил. Нифига.
Есть у кого-нибудь хоть какие-то мысли, в какую сторону копать?


Eugene
08.10.2016
10:16:13
Народ, уже всю голову сломал, помогите какими-нибудь мыслями, пожалуйста.
Есть ng1.5.5, банальный компонент, внутри его контроллера банальная функция:
var $ctrl = this;
function open() {
$ctrl.is_open = true;
}
В шаблоне на $ctrl.is_open завязан ng-show.
Если я вызываю эту функцию из самого компонента (просто хардкодом из контроллера или по ng-click на каком-нибудь элементе) - то все нормально.
А вот если она вызывается коллбеком из местной реализации Event Emitter'a (навроде ee.on( 'my-event', open )), то начинается интересное:
- функция отрабатывает
- присваивает $ctrl.is_open = true;
- нифига не обновляет шаблон
В принципе, логично бы все валить на EventEmitter но:
1) в нем нет ничего замороченного, он просто проходит по массиву подписчиков и вызывает коллбеки
2) функцию то он вызывает нормально
3) в куче аналогичных мест - все работает как часы
$scope.$apply(); и прочую подобную магию применял, дебаггером по коду ходил. Нифига.
Есть у кого-нибудь хоть какие-то мысли, в какую сторону копать?
transclude true?


Михаил
08.10.2016
10:16:47
нет, по дефолту, false


Lupsick
08.10.2016
10:16:54
Народ, уже всю голову сломал, помогите какими-нибудь мыслями, пожалуйста.
Есть ng1.5.5, банальный компонент, внутри его контроллера банальная функция:
var $ctrl = this;
function open() {
$ctrl.is_open = true;
}
В шаблоне на $ctrl.is_open завязан ng-show.
Если я вызываю эту функцию из самого компонента (просто хардкодом из контроллера или по ng-click на каком-нибудь элементе) - то все нормально.
А вот если она вызывается коллбеком из местной реализации Event Emitter'a (навроде ee.on( 'my-event', open )), то начинается интересное:
- функция отрабатывает
- присваивает $ctrl.is_open = true;
- нифига не обновляет шаблон
В принципе, логично бы все валить на EventEmitter но:
1) в нем нет ничего замороченного, он просто проходит по массиву подписчиков и вызывает коллбеки
2) функцию то он вызывает нормально
3) в куче аналогичных мест - все работает как часы
$scope.$apply(); и прочую подобную магию применял, дебаггером по коду ходил. Нифига.
Есть у кого-нибудь хоть какие-то мысли, в какую сторону копать?
попробуй в $timeout обернуть

Google

Eugene
08.10.2016
10:17:24

Михаил
08.10.2016
10:17:41
пробовал, не помогло
сейчас в функции достал через angular.element.isolateScope(), сравнил со скоупом контроллера - оказались разные.

Lupsick
08.10.2016
10:17:47
function open() {
$timeout(function() {
$ctrl.is_open = true;
});
}

Михаил
08.10.2016
10:18:38

Lupsick
08.10.2016
10:18:59
ну вот это танцы с бубном и ангуларом
постоянные

Михаил
08.10.2016
10:19:33
Ну бывает, да. Обычно неделями ничего не вылазит, а потом хрясь, и доставай бубен.
Немного дополню/изменю вопрос.
Почему скоуп может "отцепиться" от элемента?
Во время вызова функции достаю скоуп через angular.element и через $scope.
Когда функция работает нормально - скоупы совпадают.
Когда не работает - они оказываются разными, в скоупе элемента is_open: false, контроллера - как надо, true

Alex
08.10.2016
11:03:24
ee.on( 'my-event', open ) у тебя внутри контроллера?
у тебя при таком вызове по идее теряется скоуп. попробуй через bind создать обёртку с контекстом $ctrl, и передавать в ee.on результат обёртки
это похоже на то, как если бы использовал внутри таймаута функцию, работающую со скоупом - его там просто нет, поэтому и есть обёртки $timeout и $interval

Михаил
08.10.2016
11:11:35
Ок, спасибо за мысль. Вернусь к компу - попробую.

Alex
08.10.2016
12:36:30
есть массив айтемов, получаемых с сервера. когда я их получаю, я пихаю их в переменную контроллера, на которой в шаблоне висит ng-repeat. Вопрос: как мне анимировать появление каждого элемента в списке? не всего списка сразу, а именно каждого элемента?

Google

Aleks
08.10.2016
12:41:08

Alex
08.10.2016
12:41:19
ограничено
я сейчас придумал такую штуку
let items = itemsFromApi;
items.forEach((item, i) => $timeout(() => vm.items.push(item), i*50))

Aleks
08.10.2016
12:43:31
Если это небольшая цифра то можешь через классы сделать "b-item-{$index}, а в классах постепенно увеличивать транзишн
Дилэй

MVP
08.10.2016
13:56:44

Alex
08.10.2016
14:51:03
можно, но попахивает стрельбой из пушки по воробьям

Дмитрий
08.10.2016
15:02:18

Alex
08.10.2016
15:03:53
ну я не настаиваю на элгенатности)

MVP
08.10.2016
16:51:43
Ну да Stackoverflow тоже самое предлагает

Дмитрий
08.10.2016
19:48:37
Точнее я бы даже сказал, что нужно))
Модуль добавляет классы объектам во время разных событий, и потребуется просто описать анимации в css для класса наподобие .directive-on-add

MVP
08.10.2016
19:58:41
И санимируются все сразу

Дмитрий
08.10.2016
20:08:17
Можно попробовать указать задержку в анимации селектора
.block-add + .block-add
Или во - там же вообще есть класс и на начало события и на конец, объявляем в css начало анимации на
.block-add-end + .block-add
Если нормально оформить идею, то всё само будет анимироваться по цепочке)

Evgeny
09.10.2016
12:01:25
Ребят, подкиньте годную литературу по ангуляру с примерами желательно


Kool
09.10.2016
12:23:42
Народ, уже всю голову сломал, помогите какими-нибудь мыслями, пожалуйста.
Есть ng1.5.5, банальный компонент, внутри его контроллера банальная функция:
var $ctrl = this;
function open() {
$ctrl.is_open = true;
}
В шаблоне на $ctrl.is_open завязан ng-show.
Если я вызываю эту функцию из самого компонента (просто хардкодом из контроллера или по ng-click на каком-нибудь элементе) - то все нормально.
А вот если она вызывается коллбеком из местной реализации Event Emitter'a (навроде ee.on( 'my-event', open )), то начинается интересное:
- функция отрабатывает
- присваивает $ctrl.is_open = true;
- нифига не обновляет шаблон
В принципе, логично бы все валить на EventEmitter но:
1) в нем нет ничего замороченного, он просто проходит по массиву подписчиков и вызывает коллбеки
2) функцию то он вызывает нормально
3) в куче аналогичных мест - все работает как часы
$scope.$apply(); и прочую подобную магию применял, дебаггером по коду ходил. Нифига.
Есть у кого-нибудь хоть какие-то мысли, в какую сторону копать?
scope apply точно, не правильно готовишь

Google


MVP
09.10.2016
13:26:20
Народ, уже всю голову сломал, помогите какими-нибудь мыслями, пожалуйста.
Есть ng1.5.5, банальный компонент, внутри его контроллера банальная функция:
var $ctrl = this;
function open() {
$ctrl.is_open = true;
}
В шаблоне на $ctrl.is_open завязан ng-show.
Если я вызываю эту функцию из самого компонента (просто хардкодом из контроллера или по ng-click на каком-нибудь элементе) - то все нормально.
А вот если она вызывается коллбеком из местной реализации Event Emitter'a (навроде ee.on( 'my-event', open )), то начинается интересное:
- функция отрабатывает
- присваивает $ctrl.is_open = true;
- нифига не обновляет шаблон
В принципе, логично бы все валить на EventEmitter но:
1) в нем нет ничего замороченного, он просто проходит по массиву подписчиков и вызывает коллбеки
2) функцию то он вызывает нормально
3) в куче аналогичных мест - все работает как часы
$scope.$apply(); и прочую подобную магию применял, дебаггером по коду ходил. Нифига.
Есть у кого-нибудь хоть какие-то мысли, в какую сторону копать?
Поищи ng-if и прочие директивы с закрытые скоупы в соотв шаблонах


Just
09.10.2016
21:25:20
подскажите, пожалуйста, странная вещь с ng-if:
1) есть галерея картинок, они загружаются асинхронно с помощью then/Promise
2) пока они грузяться отображается анимация загрузки
пока картинки не загрузяться, отображается div с анимацией, в нем стоит ng-if="loadingChar"
когда они загружены в контролере
function charsCtrl($scope, $api, getChars, $compile) {
$scope.loadingChar = true;
var charP = getChars;
charP.then(function(result) {
$scope.data_chars = result;
$scope.loadingChar = false;
console.log('loadingChar = false');
})
значение это переменной становится false и этот div должен по идеи перестать отображаться, а div с циклом по картинкам наоборот показываться, но этого не происходит, пока или не перезагрузить страницу или не воспользоваться поиском по картинкам, который работает с помощью фильтра в div'е с ng-repeat.
div с циклом:
<div class="file-box" ng-repeat="char in data_chars | filter:searchText" ng-if="!loadingChar">
проблема решена! спасибо @rebelok
нужно было добавить в конец функции с then вот это $scope.$digest(), что бы инициировать цикл
проблема решена.
нужно было в навигации ui-sref-active="active" переименовать в ui-sref-active-eq="active". разница версий ангуляра.
https://github.com/angular-ui/ui-router/issues/1314


Ilya
10.10.2016
13:12:32
Народ, кто с nginx дружит?
Нужно при открытии /guest/aaa/bb/cc (т.е. после /guest/ любое количество разделов) nginx подгружал контент страницы /guest/, но при этом в адресной строке все так-же оставался старый адрес.
Это нужно для angular html5mode

Vlad
10.10.2016
13:19:39
всем привет
рабят
помогите с ивентами emit broadcast

Lupsick
10.10.2016
13:20:39

Vlad
10.10.2016
13:23:33
в директиве не отрабатывает on

? ethorz
10.10.2016
13:31:18

? ethorz
10.10.2016
13:32:39
http://stackoverflow.com/a/30001043

Dmitri
10.10.2016
13:37:15

Виктор
10.10.2016
13:37:21
У меня тоже работает

Dmitri
10.10.2016
13:37:48
посмотри в документации как параметры слать

Vlad
10.10.2016
13:38:24
делаю через компоненту, у нее есть контролер

Admin
ERROR: S client not available

Vlad
10.10.2016
13:43:30
в ng-init не хочет подписывать на бродкаст

MVP
10.10.2016
14:13:10
> @vladb9582
в ng-init не хочет подписывать на бродкаст
не очень понятно. ошибка какая то падает или просто не всплывает событие ?

Google

Vlad
10.10.2016
14:13:27
просто не всплывает(
спасибо за помощь)

Дмитрий
10.10.2016
19:32:07
А теперь спрашивай ?

ExNihil14
10.10.2016
19:32:51
Сейчас, сначала традицию воблюду)
соблюду*
#whois
I)Делаю админку, пока не работаю.
II) Начинающий Front-end специалист
III) Могу задавать интересные вопросы и в перспективе отвечать на вопросы других
IV) Интересно предметом изучения
V) Гомель(Беларусь)
VI) Дали ссылку из группы pro.js
У меня есть нужда реализовать маршрутизацию с помощью ui-router, есть форма с валидацией, сама админка, с сайдбаром и ссылками на настройки, лист событий и списком предприятий. Подкажите, как лучше все организовать.

Дмитрий
10.10.2016
19:49:38
Ну какой-то слишком общий вопрос) Если ничего не понятно, то просто пробовать и спрашивать по ходу)

Каїн
10.10.2016
19:50:23
Органиструй по правильному

Михаил
10.10.2016
19:50:47
как минимум покажи дизайн
как это все выглядит

Max
10.10.2016
19:51:14
Народ кто пилит или пилил админки на ангуляре, почему много примеров админок, сделаны с левым меню что бы не было переходов назад?

Каїн
10.10.2016
19:51:31
Это выглядит как дерево
Где все начинается с app
тупой вопрос
создать переменную для всего апп
.constant создает только для модуля к которому ее написал

? ethorz
11.10.2016
10:39:33
сделай глобальную переменную просто в js)

Каїн
11.10.2016
10:39:52
выходит что это единствунный способ
с вебпаком можно было бы инжектить в файл инита модуля каждего и там приклеить в коснтанту для каждего

Google

Каїн
11.10.2016
10:40:35
а без бандлера разве что в глобал
тем более если все файлы в самовызывающиеся фн обвенуты
да ну его
віходит аппКонфиг будет в паблике
seal разве что его еще для уверенности