在AngularJS中遍历或查询$ scope

时间:2013-10-17 09:43:20

标签: javascript angularjs angularjs-directive angularjs-scope

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

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

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

2 个答案:

答案 0 :(得分:0)

我会在$ broadcast和$ on的帮助下完成此操作。见the Scope docs

在指令中你会做类似的事情:

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

在控制器中你会听到这样的事件:

$rootScope.$on('directiveName.message', function(message) {
    console.log(message.name);
});

答案 1 :(得分: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();
    }
  };
});
  • 最后,您还可以制作单件服务,并根据您的需要提供服务。