Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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
Javascript $scope.$root和$rootScope之间有什么区别?_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript $scope.$root和$rootScope之间有什么区别?

Javascript $scope.$root和$rootScope之间有什么区别?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我在控制器中看到$scope有$root,这是什么?它与可以注入控制器中的$rootScope有何不同?$rootScopevar,它指向所有作用域的父级,并且可以在任何地方注入。所有其他作用域都是$rootScope的子级。它们是通过$rootScope的$new方法创建的,因此每个作用域都继承自$rootScope 在范围定义中的角度源中构造函数: 似乎$root变量只是创建的第一个作用域的的一个占位符-$rootScope 接下来在$new方法中有: $new: function(is

我在控制器中看到$scope有$root,这是什么?它与可以注入控制器中的$rootScope有何不同?

$rootScope
var,它指向所有作用域的父级,并且可以在任何地方注入。所有其他作用域都是
$rootScope
的子级。它们是通过
$rootScope
$new
方法创建的,因此每个作用域都继承自
$rootScope

范围定义中的角度源中
构造函数:

似乎
$root
变量只是创建的第一个作用域的
的一个占位符-
$rootScope

接下来在
$new
方法中有:

  $new: function(isolate) {
      ...

    if (isolate) {
      child = new Scope();
      child.$root = this.$root;
   ...
   return child;
因此,
$rootScope
的每个作用域子级的
$root
变量是对
$rootScope
的引用。这些子级的所有子级都将获得对
$rootScope


在我看来,最好通过依赖项注入使用
$rootScope
,因为它是一种明确且更常用的引用
$rootScope
的方式,正如前面提到的,
$scope.$root
包含对
$rootScope
的引用

不幸的是,使用
$scope.$root
和使用
$rootScope
之间存在差异:

  • $scope
    为根时,其
    $root
    属性为
    null
  • $scope.$root
    仅在隔离作用域上分配:
  • 因此,您可能会遇到这样的情况:
    $scope.$root
    null

    最好使用
    $rootScope
    而不是…

    我从来没有访问过
    $scope.$root
    。它可以是在
    $scope
    上定义的任何用户定义的属性。不,它不是用户定义的。您可以在任何控制器的$scope中找到它,并且用户定义的属性永远不应该以“$”开头。我认为$scope.$root就在那里,可以方便地访问模板中的$rootScope变量,而不需要将$rootScope包含到控制器中。@canerbalci在angular 1.4中,允许销毁根范围,使用此选项。$root将在根作用域被销毁后指向null这是您不应直接传递
    $rootScope
    某个位置(例如角度ui模态)的原因之一,但应始终使用子作用域
    $rootScope.$new()错误<代码>$root
    无论如何。@PetrPeller你能解释更多或者告诉我更多信息吗。我想我遇到了一个问题,这个问题是由于$rootScope被注入到modal中引起的。谢谢。@Usagi已经有一段时间了。我建议尽可能少地使用
    $rootScope
    。如果您需要在组件之间共享信息,只需使用服务即可。注入作用域时,始终创建一个子项:
    $scope.$new()
    ,以防止出现错误。组件可能会在卸载时尝试
    $destroy
    要清理的范围,或者设置一些内部信息。这就是为什么每个组件都需要自己的
    $scope
    实例。
      $new: function(isolate) {
          ...
    
        if (isolate) {
          child = new Scope();
          child.$root = this.$root;
       ...
       return child;