Есть родительский и дочерний компоненты. Если нужно вызвать функцию родительского компонента из дочернего, то ее нужно прокинуть через bindings. Что делать если нужно наоборот, из родительского вызвать функцию, которая объявлена в контроллере дочернего компонента?
из родительского вызвать функцию, которая объявлена в контроллера дочернего компонента?
Думать, где что-то пошло не так. Родительский компонент не должен ничего такого хотеть от своих детей. Все что он может - поменять данные которые он пробрасывает через биндинги. В этом случае достаточно просто сделать сеттер (через defineProperties или просто сеттер если вы используете babel) у контроллера дочерней директивы.
В ангуляре 2 у каждого компонента свой change detector (вроде как).
Не знаете, они в итоге все одновременно отрабатывают каждый раз (как и в А1), или они работают изолированно друг от друга.
Если изолированно, то как они определяют какой тип ватча (простые типы/массив/deep watch объектов) нужно вешать при передаче в дочерний компонент? т.е. как получают событие что-бы вызвать дочерний $digest.
Я когда ковырялся с альфой, они вроде все в раз отрабатывали (как и в А1), хотя я на это акцент не делал, поэтому не уверен.
Я "вижу" несколько возможных способов передачи, интересует каким путем пошел А2.
lega: вот честно, я глубоко в change detection еще не успел погрузиться, я последний месяц активно изучал другие штуки (docker, continuous delivery налаживал), вот планирую на следующей неделе вернуться к ангуляру и разбираться.
насколько я помню, у них более реактивный подход, учитывающий зависимости между состояниями. Яркий пример - фильтры, теперь они не на каждый $digest срабатывают, а только когда исходне значение поменялось (в случае stateless фильтров).
> теперь они не на каждый $digest срабатывают, а только когда исходне значение поменялось (в случае stateless фильтров
Если Ангуляр не дергает stateless фильтр каждый раз, то там есть проблема, дело в том что в А1 stateless фильтры преобразовывали исходное значение и уже результат сравнивался, и это работает если ватч сделан на объект. Если фильтр не будет "дергаться" каждый раз, то отслеживаемый {объект} как был неизменным так и останется неизменным, а значит что-бы отловить когда содержимое поменяется, нужно менять тип отслеживания (вместо == использовать deepEqual), вот, а когда stateless дергаются каждый раз, такой проблемы может не быть.
Но с другой стороны лишние вызовы фильтров - дополнительная нагрузка...
Можно воспользоваться функцией $onChanges - во втором ангуляре аналог используется повсеместно. Нужно обратить внимание, что она работает только с one-way binding'ами. blog.thoughtram.io/angularjs/2016/03/29/exploring-...