结合两个控制器的范围

时间:2014-09-18 18:46:45

标签: angularjs

我有两个控制器/视图,一个名为member.js,用于显示成员项目列表:

   .controller( 'MemberCtrl', function MemberCtrl( $scope,ProjectsService ) {
        $scope.projects = [];
        $scope.refresh = function() {
            ProjectsService.query()
                .then(function (data) {
                    $scope.projects = data;
                });
        };
        $scope.refresh();
    })

    .factory('ProjectsService', ['$http', '$q', function($http, $q) {
        return {
            query: function() {
                var deferred = $q.defer();
                $http.get('/api/get-projects')
                    .success(function(data) {
                        deferred.resolve(data);
                    })
                    .error(function(data) {
                        deferred.reject(data);
                    });

                return deferred.promise;
            }
        };
    }])

下一个控制器位于add.js并处理创建新项目:

.controller( 'AddprojectCtrl', function AddprojectCtrl( $http,$scope,Session,$location ) {
    $scope.addProject = function(project){
        return $http
            .post('/api/create-project', project)
            .then(function (result) {
                $location.path("/member");
            });

    };

})

我遇到的问题是,一旦我添加到新项目中,MemberCtrl上的$ scope.projects已过期,并且不会显示新添加的项目。我想我可以使用一个控制器进行两种操作,但是想知道这是最好的方法还是“角度”方式是什么?

1 个答案:

答案 0 :(得分:0)

你的AddprojectCtrl不应该是一个控制器,而应该是一个工厂

.factory( 'AddprojectCtrl', function AddprojectCtrl( $http,$location ) {
        return {
            addProject:function(project) {
              $http.post('/api/create-project', project)
                //Ideally this can be done inside the controller itself
                .then(function (result) {
                   $location.path("/member");
              }
        }
})

然后你需要在控制器内注入工厂。在控制器中,您可以调用工厂的addProject函数。这是有角度的方式:)