gpt4 book ai didi

javascript - 延迟服务和 Controller

转载 作者:行者123 更新时间:2023-11-28 08:35:34 26 4
gpt4 key购买 nike

我正在尝试创建具有延迟服务的应用程序 - 服务需要执行异步操作,然后 Controller 才能使用它。

根据文档,我应该加载传递给when()函数的对象内的任何延迟数据:

resolve - {Object.<string, function>=} - An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated.

但我不能强制它工作。

应用程序:

...
var loaded = false;
var deferData = {
dfr: ['$rootScope', 'service', function($rootScope, service) {
if (!loaded) {
loaded = true;
return service.loadData();
}
}
]
};
...
$routeProvider.when('/main', {
templateUrl: './main.html',
controller: 'mainCtrl',
resolve: deferData
});

// default
$routeProvider.otherwise({
redirectTo: '/main',
resolve: deferData
});
...

服务:

app.factory('service', ['$q',

function($q) {
var s = {
loadData: function() {
var d = $q.defer();
console.log('starting defer');
setTimeout(function() {
console.log('defer resolve');
d.resolve('timeout');
}, 2500);
return d.promise;
}
};
return s;
}

]);

此代码应输出(运行、加载延迟、实例化 Controller ):

app run
starting defer
defer resolve
controller init

但它输出:

app run
starting defer
controller init
defer resolve

链接到骗子:http://plnkr.co/edit/k2D2taxAhSJkt5O174aw?p=preview

我做错了什么?也许我应该解决 .run(function(){ ... }) 中的所有延迟问题?如何强制路由器等待所有延迟解决?

附注在我的项目中,我有多项服务。其中一些将其设置存储在异步存储中,其中一些需要在几次 http 查询后初始化。我正在尝试使用 $q.all([ srv1.load(), srv2.load(), ... ]) 准备我的所有服务并将最后的 promise 传递给resolove在路由器配置中。

最佳答案

<罢工>

<罢工>

resolve - {Object.=} - An optional map of dependencies which should be injected into the controller.

因此,要使用resolve正确的是,您应该在 MainCtrl 中添加类似以下内容的内容:

function MainCtrl(..., deferData) {
...
}

路线应该是:

$routeProvider.when('/main', {
templateUrl: './main.html',
controller: 'mainCtrl',
resolve: {
deferData: deferData
}
});

<罢工>

更新:

问题是你有两个 resolve在你的 $routeProvider 中称呼。一旦您删除了默认路由中的路由,您的代码就应该按预期工作。

关于javascript - 延迟服务和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com