Não tenho certeza se a equipe angular tinha ideias misturadas sobre serviços e fábricas. Mas o código e as ideias mencionados na seção de serviços não combinam, nem mesmo no site do angular. Se o registro de serviço leva uma função de construtor como o segundo argumento e supostamente deve ser invocado como um construtor, com a palavra-chave new
, então por que não posso tratá-lo como um verdadeiro construtor passando parâmetros?
(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";
}
})();
Use a fábrica em vez do serviço
Angular é um singleton para fábrica e serviços ...
(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);
}
}
}) ();
No controlador
(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';
}
}) ();
Isso simplesmente não é amigo certo.
Trabalhe para mim.
http://jsfiddle.net/sava/612phm6n/
@mroutput , sim, mas qual é a melhor maneira?
@ sava-vidakovic. para mim também
é assim que eles funcionam :)
Comentários muito úteis
Trabalhe para mim.
http://jsfiddle.net/sava/612phm6n/