Angular $ Scope服务:它是如何工作的?

Al *_* R. 2 javascript frameworks scope angularjs

我已经和Angular进行了几个星期的试验,并且有点担心我不理解$ scope服务所使用的魔力.我已经成功地编写了使用$ scope服务来更新模型/视图的控制器,并且我已经能够编写自己的指令来执行相同的操作.

太奇妙了!我只是不知道$ scope服务引擎盖下发生的事情.当我创建类似下面的内容时,当我对$ scope.newproperty进行赋值时实际发生了什么?我找不到任何特定于$ scope服务的文档.

module.controller("menu_ctrl",['$scope','$http',function($scope,$http){
    $scope.newproperty = "Bound to model!" //magic!
}]);
Run Code Online (Sandbox Code Playgroud)

此外,当我在一个指令(下面的例子)中创建一个新的链接函数时,我怎么能突然用变量访问范围呢?我假设使用$ scope或$ apply服务有一些魔力,但我只是猜测.这里的任何帮助将不胜感激.谢谢!

srvcs.directive('directiv', ['$http',function($http) {
   var returnObj = {
   link: function linkfn(scopeVar, instance, attr){
      console.log(scopeVar);
      scopeVar.newproperty = "Also bound to model!" //more magic!
      ...
      ...
      }
   };
   return returnObj;
 }]);
Run Code Online (Sandbox Code Playgroud)

Mic*_*ord 5

$scope不是服务本身 ; 它只是应用程序根范围的子范围.所以你应该查看$ rootScope服务文档.

从技术上讲,范围是一个原型继承的对象,$rootScope它是使用该$new方法创建的.因为它是一个对象,所以你可以通过它来创建新的属性$scope.property = value;.引擎盖下没有吸气剂/固定剂方法.要更好地理解它,您应该查看function $RootScopeProvider()Angular源代码.

由于范围只是一个对象,您可以link在指令中的函数中访问它,就像在控制器中一样.不需要魔法.:)

关于$apply,它也不是服务,而是服务的方法$rootScope.它所做的就是触发一个摘要周期,以便Angular处理当前范围及其子项的观察者.

最后,您可能有兴趣查看有关Angular范围的文章,如果您还没有.:)