Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs angular.js$scope.$broadcast,$scope.$emit,$rootScope.$broadcast使用什么?_Angularjs_Angularjs Scope_Broadcast - Fatal编程技术网

Angularjs angular.js$scope.$broadcast,$scope.$emit,$rootScope.$broadcast使用什么?

Angularjs angular.js$scope.$broadcast,$scope.$emit,$rootScope.$broadcast使用什么?,angularjs,angularjs-scope,broadcast,Angularjs,Angularjs Scope,Broadcast,我正在构建一个搜索指令,我希望我的应用程序的多个其他指令能够侦听文本搜索的更改 我试图理解广播和发射之间的区别,以及什么最适合我的目的 据我所知,$broadcast和$emit之间的区别在于,$broadcast只沿着作用域树向下,而$emit沿着作用域树向上 到目前为止,我一直在为我的活动使用$rootScope.$broadcast,这在很大程度上是全局范围的。 这是正确的做事方式吗? 如果我有太多的rootScope。$广播事件,我应该担心吗?或者这不是问题 一般来说,您不应该到处注入$

我正在构建一个搜索指令,我希望我的应用程序的多个其他指令能够侦听文本搜索的更改

我试图理解广播和发射之间的区别,以及什么最适合我的目的

据我所知,$broadcast和$emit之间的区别在于,$broadcast只沿着作用域树向下,而$emit沿着作用域树向上

到目前为止,我一直在为我的活动使用$rootScope.$broadcast,这在很大程度上是全局范围的。 这是正确的做事方式吗?
如果我有太多的rootScope。$广播事件,我应该担心吗?或者这不是问题

一般来说,您不应该到处注入
$rootScope
。它常常会成为一根拐杖,最终你会有很多“全局变量”

我要么构建一个抽象了
$rootScope.broadcast
调用的服务,要么干脆改用数据绑定:

<my-directive text-search="foo"></my-directive>

有趣的想法@mmattax,关于上面的you指令,您是否建议我在搜索框中设置一个文本搜索属性,然后链接到其他指令?您将其设置为
text search='foo'
,但我想向任何侦听搜索的对象传递一个值,因此我不确定您提供的示例是如何实现这一点的。@pedalpete您将有一个搜索框,它使用ng模型在范围上发布搜索文本(在我的示例中,“foo”就是这样的)。其他指令只是观察变化。
.directive('myDirective', [function() {
  return {
    link: function($element, $scope, $attrs) {
      $scope.$watch($attrs.textSearch, function(newValue, oldValue) {

        // Do stuff here...

      });
    }    
  };
}]);