所以我试图了解0.2.0中的路由器是如何工作的。我建立了自己的州,当你去网址时,我的状态会得到解决。我很难搞清楚如何最好地做到每次状态转换时都会加载我的数据。
路由器
$stateProvider
.state('admin.levels',{
url: '/levels',
templateUrl: 'views/admin/levels/index.html',
resolve: {
levelData: function($q,Levels){
var deferred = $q.defer();
Levels.query(function(levels) {
console.log('resolving state');
deferred.resolve(levels);
});
return deferred.promise;
}
},
controller: 'AdminLevelsController'
})
.state('admin.levels.create',{
url: '/create',
templateUrl: 'views/admin/levels/create.html',
controller: 'AdminLevelsController'
})
控制器
'use strict';
angular.module('mean.levels').controller('AdminLevelsController', ['$scope', '$state','$stateParams', '$location', 'Global', 'Levels','levelData', function ($scope, $state, $stateParams, $location, Global, Levels, levelData) {
$scope.new = function(){
var level = new Levels({
title: this.title,
content: this.content
});
level.$save(function(response){
$state.go('admin.levels');
});
};
}]);
我可能会离开,我对Angular很新,只是想绕过这个。这个想法是你到达'索引'视图,并有一个级别列表。您点击链接创建一个,提交调用new()
的表单,然后转换回admin.levels
状态。我希望的是,将再次调用resolve,但它似乎只被调用一次。我猜这与已经实例化的控制器有关,因此不需要再次实例化。
我认为倾听状态变化可能是一种选择,但它似乎有点笨拙,我想确保这是我走向前的方向。
感谢。
答案 0 :(得分:0)
好的,我的方式错了。这question终于让我指出了正确的方向。我知道控制器没有被再次实例化,但是我没有意识到这意味着范围仍然存在并且可以被使用。我最终做的就是在创建数组时将新级别推送到我的数组:
level.$save(function(response){
$scope.levels.push(response);
$state.go('^');
});
之后,我返回到我的列表所在的父状态,就像魔术一样,新项目就在那里。事后看来,这是完全合理的,我只是无法绕过它。