Я хочу написать директиву с изолированной областью, но также хочу сделать эту область доступной для родительского контроллера области. Я нашел это решение:
<div ng-controller="Main">
<popupbutton directive-scope="popup"></popupbutton>
</div>
app.directive('popupbutton', [function() {
return {
restrict: "E",
scope: {
directiveScope: "="
},
link: function(sc, el, attrs) {
sc.directiveScope = sc;
sc.testvalue = 'foo';
}
};
}]);
app.controller('Main', function($scope) {
alert($scope.popup.testvalue); // Where did the property 'popup' come from?!?
});
См. Plunker.
Я считаю это немного уродливым, потому что он включает в себя запись атрибута в HTML и код контроллера, который вы не можете определить, откуда взялось свойство scope. Есть ли лучший способ сделать это?
Edit:
Кроме того, кажется, что $scope.popup даже не доступен, когда запускается контроллер "Main". Функция привязки директивы еще не выполнена?