[英]Resolve $http request before running app and switching to a route or state
[英]resolve not running before entering route
這是一個顯示問題的jsbin ,但是,我將在這里進行解釋。 我正在嘗試使用resolve
在輸入路由之前運行一些代碼,但是它無法運行(因為console.log語句提供了更多詳細信息)。 (由於它沒有運行,所以我不確定是否要正確設置模板中resolve
的返回值)。 為什么不resolve
運行?
var app = angular.module('jsbin', ['ngRoute'])
.config(function ($routeProvider) {
'use strict';
console.log("this runs");
var routeConfig = {
controller: 'DemoCtrll',
resolve: {
store: function (demoStorage) {
console.log("this doesn't log");
return demoStorage;
}
}
};
$routeProvider
.when('/', routeConfig)
.otherwise({
redirectTo: '/'
});
});
app.controller('DemoCtrl', function($scope, $routeParams, store) {
this.name = store;
});
app.factory('demoStorage', function () {
'use strict';
return "World";
});
html
<body ng-app="jsbin">
<div ng-controller="DemoCtrl as demo">
<h1>Hello {{name}}</h1>
</div>
您需要進行一些更改:
ng-controller
指令與ng-view的路由綁定控制器一起使用,即在路由配置controller: 'DemoCtrl as demo',
的controller屬性中設置控制器別名controller: 'DemoCtrl as demo',
store
提供程序,因為不存在這樣的提供程序/服務。 這是由角度路由器注入的特殊依賴關系,只有路由器知道如何將store
作為依賴關系注入到控制器中。 這就是使用ng-controller
時發生錯誤的原因。 templateUrl
屬性。 即templateUrl:'demo.html',
ng-controller
。 ng-view
指令來呈現視圖。 即在您的index.html <ng-view></ng-view>
demo.name
。 DemoCtrl1
也有一個錯字。 總的來說,它將是這樣。
在say Demo.html
定義您的模板(在演示示例中,我使用了方便的腳本type="text/ng-template"
)
<div>
<h1>Hello {{demo.name}}</h1>
</div>
設置routeConfig:
var routeConfig = {
templateUrl:'demo.html',
controller: 'DemoCtrl as demo',
resolve: {
store: function (demoStorage) {
console.log("this doesn't log");
return demoStorage;
}
}
};
雖然它使用了角度ui路由器,但也看到了這個答案 ,但是概念是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.