简介
应用程序侧栏的第三方导航指令,建议在配置阶段加载数据。菜单项是动态的,并根据用户凭据在服务器上解析。
问题规则:
当数据加载正常时,下面的代码中定义的then()子句永远不会被执行,因此,菜单不会被填充。
问题:
任何人都可以建议在配置阶段解决承诺的方法。
哪些回复有帮助
哪些回复无效
更新:最后添加了“什么没有用”。
谢谢,
PS。我怀疑它是否相关,但只是在案例中,使用的库是:
数据:js-data 导航:eeh-navigation
服务:
.service('init', function initFactory(DS) {
return DS.defineResource('init', {
name: 'init',
idAttribute: 'id',
endpoint: '/init',
basePath: 'http://localhost:63342/api'
}).findAll({idAttribute: 'id'});
})
提供商
.provider("initProvider", ['DSProvider', function (DSProvider) {
this.$get = ["init", function initFactory(init) {
return new init(init);
}]
}])
配置
.config(["initProvider", 'navProvider', function(initProvider, navProvider) {
initProvider.$get().then(function (init) {
angular.forEach(init, function (value, key) {
navProvider.sidebarMenuItem(value.name, {
text: value.text,
iconClass: value.iconClass,
href: value.url
});
})
})
}])
什么没有效果(到目前为止)
@Bricktop建议使用承诺(我认为)提供者,这是改变,但是;(不幸的是它不起作用,.then永远不会到达。
提供者:
var promise = $q(function(resolve, reject) {
setTimeout(function() {
if (new init(init)) {
resolve(init);
} else {
reject('failed');
}
}, 1000);
});
return promise;
答案 0 :(得分:2)
我并不过分熟悉提供商的使用,因为他们并没有经常使用,但我认为我有一个解决问题的想法。
您正在使用的.then
需要承诺才能工作,只要解决了先前的承诺就会调用它,并在成功或失败时执行函数。但是,我不认为您的提供商会返回承诺,而只是返回服务。
要返回承诺,您应该能够使用$q
记录here.使用正确的承诺设置,您的then
应该被执行。我希望这有助于解决您的问题,如果不是,我会尝试改进我的答案。
这是一个显示我的意思的片段:
this.$get = ["init", function initFactory(init) {
var deferred = $q.defer();
deferred.resolve(new init(init));
return deferred.promise;
}]