繁体   English   中英

AngularJS:指令中的Scope与指令中的Compile

[英]AngularJS : Isolated Scope in directive with Compile in directive

我正在努力从我在指令的编译功能中构建的某些html访问隔离范围。 我有一个简单的例子,我正在使用的例子要复杂得多。 本质上,我无法访问隔离范围内的属性。 这是代码。

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

这对我来说很奇怪,因为从post函数来看,控制台中的范围看起来很棒。

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

还要注意第二个指令,这里带有继承的作用域,一切正常。

编辑:我更新了第一个指令(不起作用的指令)以在html中设置属性,以便在登录范围时可以在控制台中查找它。 事实证明,它位于$ parent范围内(该属性名为“ wat”)。 但为什么? 为什么它不起作用是有道理的,但是我不明白为什么html无法访问相同的隔离范围? 有没有一种方法可以强制我插入的html改为使用隔离范围?

编辑2:关于我为什么要这样做的很多问题,可以在这里找到最佳描述。 https://github.com/angular/angular.js/issues/7874 本质上,我们想对重复的内容进行ng重复处理,并将ng-repeat中的项目暴露给已包含的内容,但是您不能以一定的角度进行操作,因为被包含的内容只能访问父作用域。

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

这就是我将要尝试的(我认为)的目标

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){
    }
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM