0

我有一个带有指令和控制器的嵌套结构,我必须从这个结构的叶子访问根控制器的范围属性。我这样做是这样的:

$scope.$parent.$parent.$parent.property.value.push({ name: "Diego" });

但它丑陋且不可靠。我想知道是否有更好的方法,也许是查询范围?我注意到每个 $scope 都有一个 ID,它可以用于在不遍历整个结构的情况下检索范围吗?谢谢。

4

2 回答 2

0

我会在 $broadcast 和 $on 的帮助下做到这一点。请参阅范围文档

在指令中,您将执行以下操作:

$rootScope.$broadcast('directiveName.message', {name: 'Diego'});

在控制器中,您将监听如下事件:

$rootScope.$on('directiveName.message', function(message) {
    console.log(message.name);
});
于 2013-10-17T09:50:34.777 回答
0

AngularJS 是围绕依赖注入的思想构建的。因此,不鼓励查询范围之外的数据。

你有几个选择:

  • 如果你需要访问$rootScope,你可以简单地让 AngularJS 注入它。

例如,如果您使用控制器:

myApp.controller('myCtrl', function ($rootScope) {
  // AngularJS will recognize the parameter and populate it
  $rootScope.property.value.push({name: 'Diego'});
});

例如,您可以将指令控制器附加到主体并与子项中的任何指令共享:

myApp.directive('body', function () {
  return {
    restrict: 'E',

    controller: function () {
      this.hello = function () { … };
    }
  };
});

myApp.directive('myDir', function () {
  return {
    require: '^body',

    link: function (scope, element, attr, bodyCtrl) {
      bodyCtrl.hello();
    }
  };
});
  • 最后,您还可以创建一个单例服务,并在需要时使用它。
于 2013-10-17T09:59:12.023 回答