我有一个代表一个人的对象:
function Person(_name) {
this.name = _name;
this.start = function() {
var that = this
$timeout( function sayHello() {
console.log(that.name);
$timeout(sayHello, 1000);
}, 1000);
}
}
请注意,它使用了角度$timeout
服务。我应该把它放在哪里,以便我可以在我的控制器中声明人员:
function Ctrl($scope) {
// How do I access Person so I can do this?
$scope.p1 = Person('nick');
$scope.p2 = Person('amy');
$scope.p1.start();
$scope.p2.start();
}
我可以将声明放在控制器主体中,它可以工作,但这看起来不像是好的设计。我非常确定一个价值或提供商是专门为此而设的。但不确定如果依赖于$ timeout,它将如何工作。
答案 0 :(得分:2)
您可以在工厂中创建对象
var Person = (function (params) {
angular.extend(this, params);
return {
name: params.name,
};
});
Person.create = function create(params) {
return new Person(params);
};
myApp.factory('Person', function ($timeout) {
return Person;
});
然后在控制器中注入工厂并创建Person对象。
myApp.controller('HomeCtrl', function($scope, Person) {
$scope.person = Person.create({ name: 'Andy' });
});
答案 1 :(得分:0)
我会使它成为一个返回构造函数的Service。
var myModule = angular.module('myModule', []);
myModule.service('Person', function($timeout) {
// Actual person constructor defined once when
// the service is first instantiated
function Person(name) {
this.name = name;
this.start = function() {
var that = this
$timeout( function sayHello() {
console.log(that.name);
$timeout(sayHello, 1000);
}, 1000);
}
}
this.create = function (name) {
// Return a new instance
return new Person(name);
};
});
请注意,在这种情况下,您将使用Person.create()
创建实例。