有人可以帮我解释一下AngularJS中的这段代码吗
$rootScope.compiledScope = $scope.$new(!0, $rootScope), $scope.variable = "someValue";
- 什么是 $new 运营商在这里服务
- 什么是!0?
- How , 用于分隔两条语句并将其分配给左侧的一个变量
有人可以帮我解释一下AngularJS中的这段代码吗
$rootScope.compiledScope = $scope.$new(!0, $rootScope), $scope.variable = "someValue";
如文档所述,在您的情况下,第一个参数: !0 = true :
如果为真,则范围不会原型继承自父范围。范围是隔离的,因为它看不到父范围属性。
第二个参数,在您的情况下为 $rootScope:
将成为新创建范围的 $parent 的范围。如果未提供,则默认为此范围。
因此 $scope.$new(!0, $rootScope) 将创建 rootScope 的全新子范围。
3) 这里创建了一个新作用域,它将 $scope.variable 分配给新作用域,所以这个变量只在这个新作用域和父作用域中可用。
Q1:$new用于创建新作用域
Q2:“!0”不过是“真实”。在这种情况下,这将使 Angular 创建一个在原型上不继承父作用域的新作用域(在这种情况下为 $rootScope)。
Q3:这是一个有效的 JS 语法,在执行结束时$rootScope.compiledScope将有一个新的隔离范围,而 $scope.variable 将有someValue
从文档中,$new
函数接受 2 个参数。
第一部分:
$new(isolate, parent);
隔离:如果 true 为您正在创建的新范围创建隔离范围。这基本上意味着它不会从父范围继承。它将从父范围继承,但父范围属性对其不可见。
parent:
$scope
这将是新创建范围的父级。!0 : 在大多数编程语言中 0 == false。否定那会给你
true
。
所以破译你的代码的第一部分:
$rootScope.compiledScope = $scope.$new(!0, $rootScope)
将调用的属性添加compiledScope
到您的 $rootScope,其值将是一个新的隔离范围,其父级是 $rootScope。
隔离作用域:原型上不继承其父作用域的作用域。它基本上是一个空范围,它的父级属性对它不可见。
第二部分
$scope.variable = "someValue";
将 a 附加variable
到$scope
并将其值设置为someValue
。中间的逗号只是分隔 2 条语句,就像这样做:
$rootScope.compiledScope = $scope.$new(!0, $rootScope);
$scope.variable = "someValue";