在我的AngularJS应用程序启动期间,我是否可以对模块返回的对象调用方法?
这是我的模块:
angular.module('features', [])
.factory('features', ['cookies', 'lib', function(cookies, lib) {
return {
init: function() {
lib.customer(cookies.get('customer')).then(function (enabled) {
this.feature = enabled;
});
},
feature: false,
};
}]);
在我的app.js
文件中,如果我有类似的内容:
var app = angular
.module('app', [
'features'
]);
然后我该怎么做:features.init()
以便以后再使用features.feature
来获取键值对的布尔值?
答案 0 :(得分:2)
按照书面规定,工厂会在其初始化与在控制器中使用之间创建竞争条件。
将其重写以返回承诺:
angular.module('features', [])
.factory('features', ['cookies', 'lib', function(cookies, lib) {
var enabledPromise = init();
return {
enabled: function() {
return enabledPromise;
}
};
function init() {
return (
lib.customer(cookies.get('customer'))
.then(function(enabled) {
console.log(enabled)
return enabled;
}).catch(function(error) {
console.log(error);
throw error;
})
);
}
}]);
features.enabled().then(function(enabled) {
console.log(enabled);
});
该服务还可以在路由器的resolve
功能中使用,以延迟视图的加载。