AngularJS:使用Compile in指令的指令中的隔离范围

时间:2015-06-22 17:06:55

标签: javascript angularjs angularjs-directive

我正在努力从一些我在构建指令的编译函数中构建的html访问隔离范围。我有一个简单的例子,我正在使用的那个更复杂。基本上我无法访问隔离范围的属性。这是代码。

http://plnkr.co/edit/ETIRs4j3EwZ4DFN5XkPc?p=preview

对我来说这很奇怪,因为在后台功能中,范围看起来很棒。

注意如何在编译函数中设置html: tElement.append(angular.element('<div>{{name}}</div><span>{{value}}</span><span>Hello</span>'))

还要注意第二个指令,这里有一个继承的范围,一切正常。

编辑:我更新了第一个指令(该指令不起作用)来设置html中的属性,以便在我记录范围时可以在控制台中查找它。事实证明它在$ parent范围内(该属性命名为&#34; wat&#34;)。但为什么?这是有道理的,为什么它不起作用,但我不明白为什么HTML不能访问相同的孤立范围?有没有办法强制插入的html使用隔离的范围?

编辑2:好了很多关于我为什么要这样做的问题,可以在这里找到最好的描述。 https://github.com/angular/angular.js/issues/7874。基本上我们想要重复一些被转换的内容,并将项目从ng-repeat暴露给被转换的内容,但是你不能以角度来做,因为被转换的内容只能访问父作用域。

目标是使第一个指令像第二个一样工作,因为两个属性(值和名称)的值在编译函数中附加html,并具有隔离范围。

1 个答案:

答案 0 :(得分:0)

这就是我想要实现的目标(我认为)

http://plnkr.co/edit/mL7h7Hf8TkkpfsPNoL6g?p=preview

通过使用带有transclude:true的模板和链接函数,可以在解释角度表达式时用模板替换元素,从而获得所需的结果

您可以使用replace:true来进一步自定义指令

app.directive('widget',function(){
  return {
    restrict:'E',
    transclude: true,
    template: '<span ng-bind="wat=\'YES\'"></span><div>{{name}}</div><span>{{value}}</span>&nbsp;<span>There</span>',
    scope:{
      name:'@',
      value:'='
    },
    link:function($scope, tElement){
    }
  }
});