我一直在试验Angular几周,并且有点担心我不理解$ scope服务所使用的魔力。我已成功编写使用$ scope服务来更新模型/视图的控制器,并且我已经能够编写自己的指令来执行相同的操作。
太神奇了!我只是不知道$ scope服务引擎盖下发生的事情。当我创建类似下面的内容时,当我对$ scope.newproperty进行赋值时实际发生了什么?我找不到任何特定于$ scope服务的文档。
module.controller("menu_ctrl",['$scope','$http',function($scope,$http){
$scope.newproperty = "Bound to model!" //magic!
}]);
此外,当我在一个指令(下面的例子)中创建一个新的链接函数时,我怎么能突然用变量访问作用域呢?我假设使用$ 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;
}]);
答案 0 :(得分:5)
$scope
本身不是服务 ;它只是应用程序根范围的子范围。所以你应该查看$rootScope service文档。
从技术上讲,范围是一个原型继承自$rootScope
的对象,它是使用$new
方法创建的。由于它是一个对象,您只需通过执行$scope.property = value;
就可以在其上创建新属性。引擎盖下没有吸气剂/固定剂方法。要更好地理解它,您应该在Angular源代码中查找function $RootScopeProvider()
。
由于范围只是一个对象,您可以在指令中的link
函数中访问它,就像在控制器中一样。不需要魔法。 :)
关于$apply
,它也不是服务,而是$rootScope
服务的方法。它只是触发一个摘要周期,以便Angular处理当前范围的观察者及其子女。
最后,您可能有兴趣查看understanding Angular scopes上的这篇文章,以防您还没有。 :)