Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 角度根范围和范围问题_Javascript_Angularjs_Rootscope - Fatal编程技术网

Javascript 角度根范围和范围问题

Javascript 角度根范围和范围问题,javascript,angularjs,rootscope,Javascript,Angularjs,Rootscope,我注意到在我的一个控制器中注入了$rootScope和$scope,它们都指向同一个对象 此外,在我的所有其他控制器中,$scope对象是共享的。因此,每当我注入作用域时,它都会在所有其他已实例化的控制器中包含分配给它的属性/方法 这不是我从一开始就开发的一个应用程序,它非常庞大。我以前从未见过这种行为,我不知道从哪里开始诊断它。你知道这是什么原因吗 我们设置控制器/指令的方式非常标准,如下所示: angular.module('myApp') .directive('mainNav', f

我注意到在我的一个控制器中注入了$rootScope和$scope,它们都指向同一个对象

此外,在我的所有其他控制器中,$scope对象是共享的。因此,每当我注入作用域时,它都会在所有其他已实例化的控制器中包含分配给它的属性/方法

这不是我从一开始就开发的一个应用程序,它非常庞大。我以前从未见过这种行为,我不知道从哪里开始诊断它。你知道这是什么原因吗

我们设置控制器/指令的方式非常标准,如下所示:

angular.module('myApp')
  .directive('mainNav', function() {
    return {
      restrict: 'A',
      templateUrl: 'scripts/directives/mainNav/mainNav.html',
      controller: 'mainNavCtrl',
      replace: true,
      link: function(scope, element) {
          //Do DOM-related stuff
        });
      }
    };
  })
  .controller('mainNavCtrl', function($rootScope, $scope, $state) {
    //Do controller stuff
  });
$scope.anObject.anAttribute
我们也会按照以下方式配置我们的应用程序:

angular.module('myApp',['ui.router','kendo.directives'])
.config(函数($stateProvider,$urlRouterProvider){ $urlRouterProvider。否则('/')

作为对库尔萨德·古尔塞夫评论的回应,我在巴塔朗看到的是:


ID为002的作用域作为$scope和$rootScope传递给第一个控制器。当属性添加到$scope时,它们显示在$rootScope上。然后所有其他控制器都接收ID为00A的作用域。因此,在这些控制器中添加到$scope的属性对所有其他注入$scope的控制器可见。

$rootScope和$scope不是同一个对象

如果在根作用域中有一个名为anObject的对象,并且它有一个名为anAttribute的属性,则可以使用$scope访问该属性,如下所示:

angular.module('myApp')
  .directive('mainNav', function() {
    return {
      restrict: 'A',
      templateUrl: 'scripts/directives/mainNav/mainNav.html',
      controller: 'mainNavCtrl',
      replace: true,
      link: function(scope, element) {
          //Do DOM-related stuff
        });
      }
    };
  })
  .controller('mainNavCtrl', function($rootScope, $scope, $state) {
    //Do controller stuff
  });
$scope.anObject.anAttribute
这是因为Angular在$scope中找不到对象时会查找父作用域

更新:

通过添加
scope:true
,mainNav指令应该具有继承的子作用域。
当“范围”为false,这是指令的默认设置,父控制器和指令的控制器共享同一个scope对象。将scope设置为true将为指令创建一个新的子作用域。

子作用域继承其父作用域的属性,除非被重写。可能就是这样。我注意到的是,rootScoped范围都具有相同的ID(在本例中为002)。另外,当我在控制器中向作用域添加属性时,它们也会显示在根作用域上。不像根作用域上的子属性,而是根作用域本身。你在Batarang作用域树上看到了什么?一个id为002的单一作用域或多个嵌套作用域都有id为002?我说得很简单,但是你在代码中搜索过类似的内容吗e将根作用域分配给作用域,例如,
$scope=$rootScope
?不,最接近的是$scope=$rootScope.$new()在一些单元测试中,这显然不是同一件事。这看起来很奇怪。也许你的
mainNav
指令应该通过添加
scope:true
来继承子作用域。我不知道你的代码中到底发生了什么。如果继承的作用域不起作用,那么我会要求你创建一个模拟你的问题的小提琴。