如何在Controller中传递不同的变量,处于不同的状态

时间:2014-04-20 10:42:45

标签: angularjs

resolve

中使用$stateProvider属性

我是angularjs的新手,并尝试使用像

这样的stateProvider
$stateProvider
            // Category routes
            .state('category', {

                url: '/category',
                templateUrl:'public/templates/category/category.html',
            })
            .state('category.list', {
                url: '/list',
                templateUrl:'public/templates/category/category.list.html',
                resolve: {
                    // A String value resolves to a service.
                    categoriesResource: 'categoriesResource',

                    categories: function(categoriesResource) {
                        return categoriesResource.query();
                    }

                },
                controller: 'CategoryCtrl',
            })
            .state('category.new', {
                url: '/new',
                templateUrl: 'public/templates/category/category.new.html',
                resolve: {
                    categories: function() {
                        return {}
                    }
                },
                controller: 'CategoryCtrl',
            })

            .state('category.update', {
                   url:'/{id:[0-9]{1,4}}',
                   templateUrl: 'public/templates/category/category.update.html',
                   resolve: {
                        categoriesResource: 'categoriesResource',
                        categories: function(categoriesResource) {
                        return categoriesResource.query({id:$stateParams.id});
            }
              },
              controller: 'CategoryCtrl',

      })

并且在类别控制器中我传递的参数如

.controller('CategoryCtrl',  ['$scope', '$state', 'categories', '$location', function($scope, $state, categories, $location) {
        $scope.categories = categories;

}])

现在,只有当我调用categories州时,resolved中的问题才会list 对于newupdate,我不需要categories,如果是update,我想传递category中的CategoryCtrl

处理此问题的最佳方法是什么。

2 个答案:

答案 0 :(得分:0)

- >首先定义控制器

function ContactController($scope) {

//...

}

- >让我们检查语法以创建模块并向其添加控制器:

var myApp = angular.module('myApp',[]);

myApp.controller('ContactController', ['$scope', function($scope) {
$scope.contacts = ["hi@email.com", "hello@email.com"];

$scope.add = function() {
    $scope.contacts.push($scope.contact);
    $scope.contact = "";
}
}]);

在上面的例子中,我们使用angular.module()方法创建了一个名为myApp的模块。然后我们在这个模块中添加了一个控制器ContactController。这只是定义控制器的另一种方法,但推荐使用。

答案 1 :(得分:0)

您应该定义两个不同的控制器。第一个控制器应该是list场景中使用的CategoryListController。然后,可以categoriesresolve

第二个控制器应该是CategoryEditController,它可以创建(新)和更新。这可以采用需要使用resolve更新的类别。