如何通过其$ scope链搜索变量

时间:2013-10-07 17:21:10

标签: javascript angularjs optimization scope

(function(){
  var outer = 'foo';
  (function(){
    var inner = 'bar';
    return [inner, outer];
  })();
})();

上面的代码创建了一个缓慢的分辨率,因为内部函数#outer需要先检查最近的对象并看到它不包含'outer',然后在下一级范围链中查找变量。 / p>

以下角度代码的行为是否完全相同?如果是这样,那么我们应该注意范围创建和范围链变量查找吗?

angular.module('app', [], function($rootScope){
    $rootScope.rootVar = 'root Variable';
})
.controller('ctrl1', function($scope){
    $scope.var1 = rootVar;
})
.controller('ctrl2', function($scope){ //nested
    $scope.var2 = rootVar;
})

1 个答案:

答案 0 :(得分:1)

在angular中你不是以相同的方式创建内部作用域,而是传递包含“作用域”的变量。所以你不能只引用rootVar,它在当前函数范围中不存在,除了你传入的$scope上的属性。所以你需要改变对

的引用
angular.module('app', [], function($rootScope){
    $rootScope.rootVar = 'root Variable';
})
.controller('ctrl1', function($scope){
    $scope.var1 = $scope.rootVar;
})
.controller('ctrl2', function($scope){ //nested
    $scope.var2 = $scope.rootVar;
})