每次解决状态

时间:2014-02-24 23:02:34

标签: angularjs angular-ui-router

所以我试图了解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,但它似乎只被调用一次。我猜这与已经实例化的控制器有关,因此不需要再次实例化。

我认为倾听状态变化可能是一种选择,但它似乎有点笨拙,我想确保这是我走向前的方向。

感谢。

1 个答案:

答案 0 :(得分:0)

好的,我的方式错了。这question终于让我指出了正确的方向。我知道控制器没有被再次实例化,但是我没有意识到这意味着范围仍然存在并且可以被使用。我最终做的就是在创建数组时将新级别推送到我的数组:

level.$save(function(response){
    $scope.levels.push(response);
    $state.go('^');
});

之后,我返回到我的列表所在的父状态,就像魔术一样,新项目就在那里。事后看来,这是完全合理的,我只是无法绕过它。