2015-10-13 52 views
0

我有一个指令,不幸的是,我从模板创建的调用没有经过模板本身。为了测试这个,我实际上创建了另一个名为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> 

上解决此问题的任何帮助,将不胜感激。 谢谢

+0

显示如何在'seg'数组中使用指令和数据? ng-repeat'实际上可以过滤掉所有的东西。 –

+0

所以我创建了由三件事组成的ngmodels对象。标题,说明和段数组。段数组被显示为反对用户点击。在点击一个文本框后,该数组将被填充点击段的复选框的ID或删除,如果它已经存在。有趣的是,我的细分数据将显示,但我新设置的范围内没有任何内容正在处理中。 – user2977578

+0

哪里的'ng-model'在......代码中没有显示的代码?听起来就像你打破了在ng模型中不使用对象的黄金法则。创建一个演示,复制问题 – charlietfl

回答

0

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

这是因为组合的:

  1. replace: true
  2. 隔离范围,和
  3. 的具有元件transclusion模板的根元素(由于ng-repeat,但同样将是真实与ng-if )。

的错误是replace“休息”这是该元素上创建的范围。

无论如何,解决方法是增加一个根元素在模板包裹ng-repeat ED元件:

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

OR除去replace: true,因为它无论如何弃用。

+0

这是一个很奇怪的错误,谢谢你的帮助。我从来没有想过它。 – user2977578

相关问题