Angular Run Block - Use UI-Router $stateProvider to Resolve Promise(Angular Run Block - 使用 UI-Router $stateProvider 解决 Promise)
问题描述
UI-Router
不同于 Angular
的 ngRoute
.它支持普通 ngRoute
可以做的所有事情以及许多额外的功能.
UI-Router
is different than Angular
's ngRoute
. It supports everything the normal ngRoute
can do as well as many extra functions.
我正在将我的 Angular
应用程序从 ngRoute
更改为 UI-Router
.但我无法完全弄清楚如何以编程方式注入 resolve
函数——我在 Controller
和 config
之外使用的一段代码.
I am changing my Angular
app from ngRoute
to UI-Router
. But I cannot quite figure out how to inject resolve
function programmatically - the piece of code that I use outside Controller
and config
.
因此,使用标准 Angular
的 ngRoute
我可以在 Angular
运行中动态注入我的 resolve promise
块:
So, with standard Angular
's ngRoute
I can dynamically inject my resolve promise
in the Angular
run block:
app.run(function ($route) {
var route = $route.routes['/'];
route.resolve = route.resolve || {};
route.resolve.getData = function(myService){return myService.getSomeData();};
});
现在我如何使用 UI-Router
以类似的方式注入 resolve promise?我尝试通过 $stateProvider
来访问 state
,但这对我来说失败了.
Now how do I inject resolve promise in a similar way using UI-Router
? I tried passing $stateProvider
to get access to state
s but that was failing for me.
angular.module('uiRouterSample').run(
[ '$rootScope', '$state', '$stateProvider'
function ($rootScope, $state, $stateProvider) {
//$stateProvider would fail
推荐答案
您可以使用 resolve
在控制器加载下一个状态之前为其提供数据.要访问已解析的对象,您需要将它们作为依赖项注入到控制器中.
You can use resolve
to provide your controller with data before it loads the next state. To access the resolved objects, you will need to inject them into the controller as dependencies.
让我们以购物清单应用程序为例.我们将从定义我们的应用程序模块开始,并包含 ui.router
作为依赖项.:
Let's use a shopping list application as an example. We'll start by defining our application module, and including ui.router
as a dependency.:
angular.module('myApp', ['ui.router']);
我们现在要定义特定于我们应用程序的购物清单页面的模块.我们将定义一个 shoppingList
模块,包括该模块的状态、该状态的解析以及控制器.
We now want to define the module that will be specific to the shopping list page of our application. We'll define a shoppingList
module, include the states for that module, a resolve for that state, and the controller.
购物清单模块
angular.module('myApp.shoppingList').config(function ($stateProvider) {
$stateProvider.state('app.shoppingList', {
url: '/shopping-list',
templateUrl: 'shopping-list.html',
controller: 'ShoppingListController',
resolve: {
shoppingLists: function (ShoppingListService) {
return ShoppingListService.getAll();
}
}
});
});
我们现在可以将解析的对象作为依赖注入到我们的控制器中.在上述状态下,我将一个对象解析为名称 shoppingLists
.如果我想在我的控制器中使用这个对象,我将它作为一个具有相同名称的依赖项包含在内.
We now can inject our resolved objects into our controller as dependencies. In the above state, I am resolving an object to the name shoppingLists
. If I want to use this object in my controller, I include it as a dependency with the same name.
购物清单控制器
angular.module('myApp.shoppingList').controller('ShoppingListController', function ($scope, shoppingLists) {
$scope.shoppingLists = shoppingLists;
});
有关更多详细信息,请阅读 Angular-UI Wiki,其中包括 Angular-UI Wikia href="https://github.com/angular-ui/ui-router/wiki#resolve" rel="noreferrer">使用解析的深入指南.
For additional details read the Angular-UI Wiki, which includes an in-depth guide to using resolve.
这篇关于Angular Run Block - 使用 UI-Router $stateProvider 解决 Promise的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Angular Run Block - 使用 UI-Router $stateProvider 解决 Promise


- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Flexslider 箭头未正确显示 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01