您好我已经开始学习角度几天了,我得说它是一条坎坷的道路。我对SPA应用程序并不陌生,过去一年我一直在使用Durandal的项目。
在两天内,我将不得不开始使用angular and angular-ui-router的项目。
出于某种原因,我似乎无法配置甚至在angular-ui-router docs上找到的最简单的例子:https://github.com/angular-ui/ui-router/wiki
截至目前,我有以下代码:
这是我的javascript代码:
<script>
var codeArtApp = angular.module("codeArtApp", ['ui.router']);
codeArtApp.controller('MyCtrl', function($state){
$state.go('contacts')
});
codeArtApp.config(function($stateProvider){
$stateProvider.state('contacts', {
template: '<h1>{{title}}</h1>',
resolve: { title: 'My Contacts' },
controller: function($scope, title){
$scope.title = 'My Contacts';
},
onEnter: function(title){
console.log(title)
},
onExit: function(title){
if(title){
}
}
})
});
</script>
这是我的HTML:
<body ng-app="codeArtApp">
<div ng-controller="MyCtrl">
<section ui-view></section>
</div>
</body>
当我运行应用程序$ state.go('contacts')被执行但我没有被发送到联系人状态并且未加载html。
如果我尝试加载状态,则浏览器url /#/ contacts仍然没有任何反应。
我做错了什么?
修改
我还绑定了$ stateChangeError事件,我看到我正在获得堆栈跟踪:
它似乎正在尝试解决“我的ContactsProvider”,但我将状态联系人命名为此处发生了什么?
答案 0 :(得分:5)
有一个有效的plunker。我们必须做的改变是:
首先我们必须
url : '/'
参数,属于任何州和controller="..."
设置,这不是使用ui-router
评估状态的方式其次,我们必须正确使用必须为doc says
的resolve
功能
解决
...
resolve
属性是一个地图对象。 map对象包含键/值对:key -
{string}
:要注入控制器的依赖项名称 工厂 -{string|function}
:
- 如果是字符串,则它是服务的别名。
- 否则,如果是函数,则将其注入,并将返回值视为依赖项。如果结果是一个promise,则在实例化控制器并将其值注入控制器之前解析它。
正如我们所看到的,在resolve对象中我们可以返回字符串,但作为服务名称
这是经过调整的and working脚本:
'use strict';
var codeArtApp = angular.module("codeArtApp", ['ui.router']);
// NOT NEEDED
// codeArtApp.controller('MyCtrl', function($state) {
// $state.go('contacts')
// });
codeArtApp.config(function($stateProvider) {
$stateProvider.state('contacts', {
url : "/",
template: '<h1>{{title}}</h1>',
resolve: {
// title: 'My Contacts'
title: function() { return 'My Contacts'; },
},
controller: function($scope, title) {
$scope.title = 'My Contacts';
},
onEnter: function(title) {
console.log(title)
},
onExit: function(title) {
if (title) {
}
}
})
});
这样我们就会触发默认状态
codeArtApp.config(['$urlRouterProvider',
function($urlRouterProvider) {
$urlRouterProvider.otherwise('/');
}
]);
这是html模板:
<body ng-app="codeArtApp">
<!--<div ng-controller="MyCtrl">
<section ui-view></section>
</div> -->
<section ui-view></section>
</body>
检查代码here