Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   AngularJs isolated scope directive (https://javascript.ru/forum/angular/42864-angularjs-isolated-scope-directive.html)

sealmu 12.11.2013 14:54

AngularJs isolated scope directive
 
у меня 2 директивы :
directive-1 -> добовляет обработку click и показывает popup.
закрыто в isolated scope, т.к. может быть добавлена к разным элементам и не хочу засарять их scope(и хочу исключить вмешательство в него, только если через properties)

directive-2 -> теряет scope контроллера из за isolated scope в directive-1.


<body ng-controller="mainController">
<directive-1 popup="pop-1">

      <directive-2  callbackfunc="func-1">

      </directive-2>

</directive-1>
</body>

или
<body ng-controller="mainController">
<div directive-1>

      <directive-2  callbackfunc="func-1">

      </directive-2>

</div>
</body>




как я могу закрыть directive-1 в isolated scope но не влиять на scope directive-2?

DjDiablo 13.11.2013 18:52

Никак. Это идеологически невозможно вложенная директива всегда имеет доступ к scope внешний изолированной директивы но не глубже.
Все что ты можеш это получить доступ к scope контрола какимнибудь полухакерским способом
Например как нибудь так
controllerScope=angular.element("#scope").scope();
Либо при помощи $scope.$parent

но это не тоже самое что размещение директивы 2 в scope контролера

nerv_ 13.11.2013 21:14

Цитата:

Сообщение от sealmu
как я могу закрыть directive-1 в isolated scope но не влиять на scope directive-2?

Цитата:

Сообщение от DjDiablo
Никак

у вас проблемы со структурой приложения, раз возникают подобные вопросы

DjDiablo 14.11.2013 08:29

Цитата:

Сообщение от nerv_ (Сообщение 280913)
у вас проблемы со структурой приложения, раз возникают подобные вопросы

У нас ?
У меня таких вопросов не возникает )))

А так согласен, просто криво спроектировано. Тот же контролер попросту можно внутрь directive 1 засунуть

sealmu 14.11.2013 12:09

в этом случае :

<body ng-controller="mainController">
<div directive-1>
      <directive-2  callbackfunc="func-1">
      </directive-2>
</div>
</body>


directive-1 - это только property к div(например как то реагировать на некое событие). как я могу по другому декларативно назначать функциональность элементам?

я могу использовать $parent но это заставляет меня каждый раз после добавления property/directive вносить изменения :

<div directive-1>
      <directive-2  callbackfunc="[COLOR="Red"]$parent.[/COLOR]func-1">
      </directive-2>
</div>


Часовой пояс GMT +3, время: 08:15.