据我了解,当在工厂内部时,我返回一个被注入控制器的对象.在服务内部时,我正在处理使用的对象this而不返回任何内容.
我假设服务总是单例,并且每个控制器都会注入一个新的工厂对象.然而,事实证明,工厂对象也是单身人士?
用于演示的示例代码:
var factories = angular.module('app.factories', []);
var app = angular.module('app', ['ngResource', 'app.factories']);
factories.factory('User', function () {
return {
first: 'John',
last: 'Doe'
};
});
app.controller('ACtrl', function($scope, User) {
$scope.user = User;
});
app.controller('BCtrl', function($scope, User) {
$scope.user = User;
});
Run Code Online (Sandbox Code Playgroud)
当改变user.first的ACtrl事实证明,user.first在BCtrl也发生了变化,比如User是一个单身?
我的假设是在一个带有工厂的控制器中注入了一个新实例?
根据AngularJS的教程,控制器函数仅位于全局范围内.
http://docs.angularjs.org/tutorial/step_04
控制器功能本身是否自动被解析为封装范围,还是它们居住在全球范围内?我知道他们传递了对自己的$ scope的引用,但看起来这个函数本身只是坐在全局范围内.显然,这可能会导致问题,我已经通过经验和教育来学习封装.此外,如果他们确实居住在全球范围内,那么将它们封装在要引用的对象中是不是最佳实践:
Object.functionName();
Run Code Online (Sandbox Code Playgroud)
而不是这个:
functionName();
Run Code Online (Sandbox Code Playgroud)
以防止全球范围内的污染(即重写功能等)发生的问题.