指令的隔离范围功能未从我的模板中调用

时间:2015-10-13 23:47:03

标签: javascript angularjs angularjs-scope directive

我有一个指令,不幸的是,我从模板中拨打的电话并没有通过模板本身。为了测试这个,我实际上创建了另一个名为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 个答案:

答案 0 :(得分:0)

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

这是因为:

的组合
  1. replace: true
  2. 隔离范围,
  3. 具有元素转换的模板的根元素(由于ng-repeat,但ng-if也是如此)。
  4. 错误是replace“打破”在该元素上创建的范围。

    无论如何,修复方法是在模板中添加一个包含ng-repeat ed元素的根元素:

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

    删除replace: true,因为它无论如何都已被弃用。