2

有人可以帮我解释一下AngularJS中的这段代码吗

$rootScope.compiledScope = $scope.$new(!0, $rootScope), $scope.variable = "someValue";
  1. 什么是 $new 运营商在这里服务
  2. 什么是!0?
  3. How , 用于分隔两条语句并将其分配给左侧的一个变量
4

3 回答 3

1

文档所述,在您的情况下,第一个参数: !0 = true :

如果为真,则范围不会原型继承自父范围。范围是隔离的,因为它看不到父范围属性。

第二个参数,在您的情况下为 $rootScope:

将成为新创建范围的 $parent 的范围。如果未提供,则默认为此范围。

因此 $scope.$new(!0, $rootScope) 将创建 rootScope 的全新子范围。

3) 这里创建了一个新作用域,它将 $scope.variable 分配给新作用域,所以这个变量只在这个新作用域和父作用域中可用。

于 2016-01-27T10:13:45.633 回答
1

Q1:$new用于创建新作用域

Q2:“!0”不过是“真实”。在这种情况下,这将使 Angular 创建一个在原型上不继承父作用域的新作用域(在这种情况下为 $rootScope)。

Q3:这是一个有效的 JS 语法,在执行结束时$rootScope.compiledScope将有一个新的隔离范围,而 $scope.variable 将有someValue

于 2016-01-27T10:16:30.973 回答
1

文档中,$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";
于 2016-01-27T10:23:55.050 回答