У меня есть директива, которая наследует ее область действия от контроллера. В этой Директиве есть несколько методов, когда я пытаюсь вызвать эти методы из родительского контроллера, он говорит, что метод не определен.AngularJs - методы ограниченной области действия недоступны в контроллере
Родитель Контроллер:
app.controller('ParentController', ['$scope', function($scope){
$scope.items = []; //Array of Objects.
$scope.someMethod = function(item){
$scope.directiveMethod(item.id);
}
}]);
Директива:
app.directive('someDirective', function(){
return {
restrict: 'A',
link: function(scope, el, attrs){
scope.tableGreen = function(id){
var element = angular.element('[data-cell='+id+']')
element.removeClass('some-class')
element.addClass('new-class')
}
}
}
})
HTML:
<div ng-controller="ParentController">
<div ng-repeat="item in items">
<button ng-click="someMethod(item)" >Green</button>
</div>
<div ng-include="/path/to/some/place">
<div class="some-class" some-directive></div>
</div>
</div>
Является ли это правильный подход? Или есть лучший способ?
Это очень неправильный подход. директива может знать контроллер, но контроллер должен определенно не знать модель директивы. это противоречит всей концепции директив и инкапсуляции. – Daniel
, пожалуйста, прочтите следующее: http://stackoverflow.com/questions/17900201/how-to-access-parent-scope-from-within-a-custom-directive-with-own-scope-in-an –
Я думаю, вы используйте $ broadcast или $ emit для этой работы. это идеальная работа для этого состояния. – Sandeep