this is a jsbin showing the problem但是,我会在这里解释一下。我试图在输入路由之前使用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>
答案 0 :(得分:2)
您需要进行一些更改:
ng-controller
指令与ng-view的路由绑定控制器一起使用,即在路由配置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
中也有拼写错误。总的来说,它看起来像这样。
在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;
}
}
};
<强> JSBin 强>
另见this answer尽管它使用了角度ui-router,但概念是相同的。