变量没有传递给指令范围?

时间:2014-04-28 01:38:49

标签: angularjs angularjs-directive

我正在尝试将我的地址传递给名为gmaps的指令:

  restrict: 'EA',
    template: '<div class="gmaps"></div>',
    replace: true,
    scope: {
         address: '=address'
    },

地址在控制器中定义:

app.controller('MapCtrl', function($scope) {

  $scope.streetNumber = "12";
  $scope.streetName = "sussex street";
  $scope.city = "sydney";
  $scope.country = "australia";

  $scope.address = $scope.streetNumber + "," + $scope.streetName + "," + $scope.city + "," + $scope.country;

  console.log($scope.address);


});

当我尝试检查地址时,它是未定义的:

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

plunkr地址是:http://plnkr.co/edit/CNSgfgTem0VH2RTgVPjn

1 个答案:

答案 0 :(得分:0)

删除此部分:

scope: {
    address: '=address'
}

请参阅updated plunker(现在正在按照您的意图行事)。

我认为无论何时address: '=address',它都使用隔离范围(请参阅directives的angularjs文档和Ctrl + F'隔离范围')。

您可以通过在控制器中说console.log($scope)并在指令中说console.log(scope)来测试它。您会看到您的scope ID都不同(003和004),这表明它们指的是两个不同的范围。

每当您删除address: '=address'时,您都可以在指令和控制器中再次console.log范围,并且您将看到两个ID现在都是003,这意味着它们现在都在引用在相同的范围内。

相关问题