我不确定 angular 团队是否对服务和工厂有不同的想法。 但是服务部分中提到的代码和想法并没有加起来,甚至在 angular 的网站上也没有。 如果服务注册将构造函数作为第二个参数,并且假设它被作为构造函数调用,使用new
关键字,那么为什么我不能将其视为真正的构造函数传入参数呢?
(function () {
angular
.module("App")
.service("Person", Person);
//angular wants my parameters to be injectables.
function Person(name, age) {
this.name = name;
this.age = age;
}
})();
(function () {
angular
.module("App")
.controller("DemoController", DemoController);
DemoController.$inject = ["Person"];
function DemoController(Person) {
var a = new Person("rafael", 22);// ERROR
var Demo = this;
Demo.title = "Demo";
}
})();
使用工厂代替服务
Angular 是工厂和服务的单例......
(function() {
angular
.module('App')
.factory('servicePerson', servicePerson);
function servicePerson() {
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.alert = function() {
alert('Name:' + this.name +' Age:'+ this.age);
}
var service = {
newPerson : newPerson
}
return service;
function newPerson(name, age){
return new Person(name, age);
}
}
}) ();
在控制器中
(function() {
angular
.module('App')
.controller('DemoController', DemoController);
DemoController.$inject = ['servicePerson'];
function DemoController(servicePerson) {
var a = servicePerson.newPerson('rafael', 22);
a.alert();
var Demo = this;
Demo.title = 'Demo';
}
}) ();
那不是正确的朋友。
@mroutput ,是的,但最好的方法是什么?
@sava-vidakovic。 对我也是
这就是他们的工作方式:)
最有用的评论
为我工作。
http://jsfiddle.net/sava/612phm6n/