Nil*_*lsH 17 javascript angularjs
我是一个新手AngularJS,和我刚开始理解的概念和区别factory,service和controller.据我所知,a factory用于返回可以注入的"值对象".我见过的大多数例子都是这样的:
angular.module('module.factories', function() {
factory('FactoryObject', function() {
return {
someFunction: function(someParam) {};
someOtherFunction: function(someOtherParam) {});
};
});
});
Run Code Online (Sandbox Code Playgroud)
在我controller,我希望能够使用这个对象,但我想在控制器中初始化/实例化它,因为它可以根据控制器中的事件/动作重新初始化.因此,我想知道我是否可以在工厂中返回构造函数?
angular.module('module.factories', function() {
factory('FactoryObject', function() {
function FactoryObject(initParam) {
}
FactoryObject.prototype.someFunction = function() {};
return FactoryObject;
});
});
Run Code Online (Sandbox Code Playgroud)
这是一个角度工厂的合适模式吗?或者将工厂用于这样的自定义对象只是"过度杀伤"?我应该将它包含在库js文件中并从那里引用它吗?将它放入工厂的一个好处是可以很容易地在测试中模拟它,因为它将被注入到使用它的地方.是否可以使用Angular中的其他任何机制?
我有同样的问题.这是我实施的内容:
angular.module('foo', [])
.factory('Foo', ['$http', function($http) {
return function(a, b) {
this.arr = [];
this.a = a;
this.b = b;
this.random = Math.floor(Math.random()*11);
this.someFunc = function(c) {
this.arr.push(c);
};
};
}]);
Run Code Online (Sandbox Code Playgroud)
现在,我可以这样做:
var f1 = new Foo('A', 'B');
f1.random; // i.e. 0
f1.someFunc('z'); // only affects f1.arr
var f2 = new Foo('C', 'D');
f2.random; // i.e. 8
f2.someFunc('y'); // only affects f2.arr
Run Code Online (Sandbox Code Playgroud)
使事情更加模块化.希望有所帮助.
你说得很对,这就是创建可注入“类”(构造函数)的方法。然而,factory只有当你需要注入其他东西供你的类使用时,才需要使用:
.factory('Class', ['$q', function ($q) {
function Class () {}
Class.prototype = {
constructor: Class,
doSomeAsyncAction: function () {
return $q(function (resolve, reject) {
// ...
});
},
// ...
};
return Class;
})
Run Code Online (Sandbox Code Playgroud)
如果您正在创建一个完全独立的类(例如某些数据结构),您可以只使用constant,这样您的类即使在服务提供者中也可用:
(function (undefined) {
function Class () {}
Class.prototype = { ... };
angular.module(...)
.constant('Class', Class);
})();
Run Code Online (Sandbox Code Playgroud)
作为旁注,使用provider不会对您有帮助。提供程序服务于完全不同的目的,并且(除其他外)返回一个工厂函数,然后在第一次请求的注入时使用该函数来创建服务的单个实例。提供程序用于让您在应用程序构建的_配置阶段_配置单个服务实例(请参阅文档)。
| 归档时间: |
|
| 查看次数: |
14617 次 |
| 最近记录: |