Angularjs:在同一个控制器上调用两次工厂

时间:2017-01-13 13:19:07

标签: angularjs angularjs-controller angularjs-factory

我有以下代码无法按预期工作,可能是因为我是角色的新手:)

每当我将新记录附加到我的数据库时,我想重新调用相同的工厂函数,因为该工厂将更新数据库数据以便实现我的html表。

问题

第二次没有调用工厂函数 getData(),所以我无法更新我的$ scope.dataTable

控制器代码

.controller('SomeViewController', function($scope, $routeParams, getData, addData) {

//scope new record
$scope.newRecordName = "";
$scope.newRecordType = "";

//to fulfill html record's table
getData.then(function(result){
    $scope.dataTable = result
})

// submit button calls this
$scope.addRecord = function(){
    addData.record($scope.newRecordName, $scope.newRecordType).then(function(result) {
        if (result == "OK") {
            //refresh scope dataTable
            getData.then(function(result){
                $scope.dataTable = result
            })
        }
    })
}

工厂代码

factory('getData', function($http) {
    return $http.get('some/url/')
        .then(function(response) {
            return response
        })
})
.factory('addData', function($http) {
    return {
        record: function(name, type) {
            return $http.post('some/url', {Name: name, Type: type})
                .then(function(response) {
                    return response
                })
        }
    }
})

注意我不能使用$ scope.dataTable.push('new_record_here'),因为它从数据库中删除了记录的ID,我需要有一个像这样的表: ID /名称/类型

非常感谢

1 个答案:

答案 0 :(得分:4)

将您的工厂更改为此

.factory('dataFactory', function($http){
    return {
        getData : function() {
            return $http.get('some/url/');
        },
        addData : function(name, type){
            return $http.post('some/url/', {Name: name, Type: type});
        }
    }     
})

你的控制器

.controller('SomeViewController', function($scope, $routeParams, dataFactory) {

    //scope new record
    $scope.newRecordName = "";
    $scope.newRecordType = "";

    //to fulfill html record's table
    getAllData();

    // submit button calls this
    $scope.addRecord = function() {
        dataFactory.addData($scope.newRecordName, $scope.newRecordType).then(function(result) {
            if (result == "OK") {
                //refresh scope dataTable
                getAllData();
            }
        })
    };

    var getAllData = function() {
        dataFactory.getData.then(function(result) {
            $scope.dataTable = result
        })
    }
})