没有从我的模板中调用指令的隔离范围函数

directive's isolate scope function is not being called from my template

我有一个指令,不幸的是,我从模板中进行的调用没有传递到模板本身。为了对此进行测试,我实际上创建了另一个名为 helloWorld 的范围变量,并尝试使用该字符串并显示它。这个字符串也没有显示。这种与范围和指令模板的分离非常混乱。代码如下:

angular.module('application.directives').directive('addSegment', function() {
  return {
    restrict: 'E',
    scope: {
      addmodel:'=',
      seg:'='
    },
    replace: true, // Replace with the template below
    transclude: true,
    link: function(scope, element, attrs) {
      scope.helloWorld = "hello      Worldly things";
      scope.selectedsegment = function(s,add){
        console.log("inside selectedsegment");
                if(typeof add.selectedSegments === "undefined" ){
                  add.selectedSegments = [];
                }
                var ind = add.selectedSegments.indexOf(s.id);
                if(ind === -1){
                    add.selectedSegments.push(s.id);
                }else{
                   add.selectedSegments.splice(ind,1);
               }
           }
    },
    template: "<div ng-repeat='segment in seg|filter:{status:0}'><label>{{helloWorld}}</label><input type='checkbox' ng-click='selectedsegment(segment,addmodel)'/></div>"
  };
});

来自我的 html:

<add-segment addModel='addGainCreator' seg='segments'></add-segment>

如能帮助解决此问题,我们将不胜感激。 谢谢

我前段时间遇到了这个奇怪的错误。

这是因为以下因素的组合:

  1. replace: true,
  2. 隔离范围,
  3. 具有元素嵌入的模板的根元素(由于 ng-repeat,但对于 ng-if 也是如此)。

错误是 replace "breaks" 在该元素上创建的范围。

无论如何,解决方法是添加一个根元素来包装模板中的 ng-repeated 元素:

template: '<div><div ng-repeat="segment in seg">...</div></div>'

删除 replace: true,因为它已被弃用。