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