1

我想设置隔离范围内的变量,但我不能访问变量,我在隔离范围内的链接功能中设置,也我可以访问控制器的变量。如何设置范围变量在隔离范围从链接功能

app.directive('myDir', function($timeout) { 
    return { 
     restrict: 'A', 
     scope: { 
      'propVar': '=' 
     }, 
     link: function(scope, elem) { 
      console.log(elem) 
      scope.linkVar = 'It works!' 
      console.log(scope); 
     }, 
    } 
}) 

我创建plunker来说明我的意思:http://plnkr.co/edit/lUBvIkF4fKXkEgujJpuU?p=preview

回答

3

它工作的一切理所应当的。

1)如果你定义了'propVar' : '='这意味着你的指令元素有一个属性prop-var。不是这种情况。如果您想使用prop属性,则必须以这种方式定义您的隔离范围:'propVar' : '=prop'

2)您的指令的子元素绑定到控制器范围而不是指令范围。如果您想将子元素是你的指令的一部分,您可以在您的指导使用模板:

app.directive('myDir', function() { 
    return { 
     restrict: 'A', 
     template: '<div><p>linkVar: {{ linkVar }}</p><p>propVar: {{ propVar }}</p><p>foo: {{ foo }}</p><button ng-click="foo=\'directive sucks\'">press me</button></div>', 
     scope: { 
      propVar: '=prop' 
     }, 
     link: function(scope, elem) { 
      console.log(elem) 
      scope.linkVar = 'It works!' 
      console.log(scope); 
     }, 
    } 
}) 

看到修改后的PLUNKR:http://plnkr.co/edit/MHXXkmPdtfAUqtre4Fbg?p=preview

+0

是的,但问题是,我不希望使用模板。我想在我的div的innerHTML中的东西的隔离范围。可能吗? – syabro

+2

嗯。它使用一个小补丁:template:function(tElement,tAttrs){return tElement [0] .innerHTML; } 但谢谢你的回答;) – syabro

+0

@syabro很好的解决方案! :) – michael