我有两个指令和一个控制器,问题是我不能调用一个函数' addMarkers()'来自我的指令的控制器。
我有以下代码:
derectives.js
app
.directive('collection', function () {
var tpl = '<ul><member ng-repeat="member in collection" member="member"></member></ul>';
return {
restrict: "E",
replace: true,
scope: {
collection: '='
},
template: tpl
}
})
app
.directive('member', function ($compile) {
var tpl = '<li><a ng-click="addMarkers(member)" >{{member.title}}</a>'+
'<input class="align" ng-if="!member.children" type="checkbox" ng-checked="true"/></li>';
return {
restrict: "E",
replace: true,
scope: {
member: '='
},
template: tpl,
link: function (scope, element, attrs) {
if (angular.isArray(scope.member.children)) {
element.append("<collection collection='member.children'></collection>");
$compile(element.contents())(scope)
}
}
}
})
&#13;
controller.js
app
.controller('IndexCtrl', function($scope, itemProvider){
itemProvider.getItems().success(function(data){
$scope.items = data;
});
$scope.addMarkers = function(item){
alert("Helloo");
$scope.markers = itemProvider.addMarkers();
}
});
&#13;
的index.html
<div id="menu" ng-controller="IndexCtrl">
<nav>
<h2><i class="fa fa-reorder"></i>All Categories</h2>
<collection collection='items'></collection>
</nav>
</div>
&#13;
答案 0 :(得分:1)
$ rootScope是全局范围,只有在需要时才应使用。它应尽可能保持清洁,以避免污染范围变量。
要从隔离范围访问父方法,您可以使用$ parent服务,如下所示:
scope.$parent.addMarkers();
在你的情况下,再次从另一个指令内部调用想要访问父节点的指令,因此在这种情况下你可以使用$ parent。$ parent,
scope.$parent.$parent.addMarkers();
,如下所示:
如果使用父作用域的指令数量有限,则可以执行此操作。如果层次结构很长,那么使用多个$ parent会使代码变得笨拙。在这些情况下,最好在服务中添加父方法,并从指令调用服务本身。
答案 1 :(得分:0)
我应该使用$ rootScope而不是下面的$ scope,
$rootScope.addMarkers = function(item){
alert("Helloo");
$scope.markers = itemProvider.addMarkers();
}