Angularjs 变量未传递到指令范围?

Angularjs 变量未传递到指令范围?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正试图将我的地址传递给一个名为gmaps的指令: restrict: 'EA', template: '<div class="gmaps"></div>', replace: true, scope: { address: '=address' }, 当我尝试检查地址时,它未定义: link: function postLink(scope, iElement, iAttrs) { console.

我正试图将我的地址传递给一个名为gmaps的指令:

  restrict: 'EA',
    template: '<div class="gmaps"></div>',
    replace: true,
    scope: {
         address: '=address'
    },
当我尝试检查地址时,它未定义:

 link: function postLink(scope, iElement, iAttrs) {
      console.log('address', scope.address);
plunkr地址为:

删除此部分:

scope: {
    address: '=address'
}
看到了吗?它正在做你想做的事情

我认为,每当您执行address:'=address'时,它都会使用隔离作用域,请参见angularjs文档和Ctrl+F“隔离作用域”

您可以通过在控制器中说console.log$scope,在指令中说console.logscope来测试这一点。您将看到您的作用域ID都是不同的003和004,这表明它们引用的是两个不同的作用域


无论何时删除地址:'=address',您都可以在指令和控制器中再次console.log作用域,您将看到两个ID现在都是003,这意味着它们现在都引用同一作用域。

没问题,很高兴我能帮上忙。@user603007这是正确的,但是。。。如果你计划在你的应用程序中使用一个以上的gmaps元素,你必须为每个元素创建一个单独的控制器,否则每次你创建一个新元素时,它们都会覆盖彼此的地址和其他信息。隔离作用域的思想是每个gmaps元素都有自己的作用域。如果像以前一样使用=address,则只需在表示地图的html元素上为address=123的某个街道传递一个值,该地址将绑定到该地图。这就是隔离作用域的全部思想。@user603007例如,在您的标记中,您可以有,然后地址“123 Some Avenue”绑定到该特定元素的作用域。
scope: {
    address: '=address'
}