Javascript Can';t从指令模板访问范围
指令:Javascript Can';t从指令模板访问范围,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,指令: angular.module('myApp') .directive('rankingTags', function() { return { restrict: 'E', scope: {}, controller: function($scope) { $scope.updateTagList = function(tag) { console.log('updateTagList function
angular.module('myApp')
.directive('rankingTags', function() {
return {
restrict: 'E',
scope: {},
controller: function($scope) {
$scope.updateTagList = function(tag) {
console.log('updateTagList function called') // never logged
};
},
templateUrl: '/app/common/directives/tags.tpl.html',
replace: true
};
});
指令的模板:
<div class="tag" ng-repeat="tag in $root.collection.tags track by $index">
<input ng-click="updateTagList(tag)" type="checkbox" />
<label>{{tag.name}}</label>
</div>
{{tag.name}
从另一个模板调用指令:
<ranking-tags></ranking-tags>
我无法从指令模板访问updateAglist
函数。因此,不知何故,此控制器未链接到模板
我做错了什么?
$root.collection.tags
应该只是tags
,因为模板的作用域已经是指令的$scope
。您不需要替换:true
(这就是破坏您功能的原因),如果愿意,您可以使用transclude:true
。更换是去润滑的
从更改中—
用于定义替换指定元素的指令的替换标志
它们处于打开状态,将在下一个主要角度版本中删除。这
特征具有困难的语义(例如属性如何合并)和
与它解决的问题相比,它会导致更多的问题。还有
WebComponents在DOM中有自定义元素是正常的
如果它没有被删除,但是已知的bug没有被修复,如果你有兴趣的话,你可以在这里查看这个线程 为什么
“NodeJs”
在引号中?无法双向绑定到字符串。目的何在?另外,当标记集合已经传递到指令中时,为什么重复查找$root
?建议您创建一个复制的演示problem@charlietfl传递给指令的标签列表为空UpdateGlist
函数对其进行更新,然后您可以使用页面控制器中的$watch
捕捉更改<代码>$root.collection.tags($rootScope value)另一方面有一个标记列表。停止更改代码。这样做只会从问题的初始出发点增加混乱。从隔离的范围对象中删除范围项不会解决您的问题。。。除非你彻底摆脱孤立的作用域,否则情况会变得更糟。updateAglist
没有理由不可用。如果你需要进一步的帮助,你需要提供帮助。将其中一些粘贴到plunker并向我们展示有多难?$root.collection.tags
来自$rootScope