使用$ resource和可选参数共享数据

时间:2016-05-24 11:12:12

标签: angularjs angular-resource angular-services

我正在尝试在控制器之间共享数据 - 我的侧面导航控制器带有一个表列表,而我的主控制器控制表本身..

我的服务非常简单:

.factory('TableData', ['$resource',
    function($resource) {
        return $resource('api/db/:table', {table: '@table'}, {
            'save':   {method:'POST'},
            'update': { method:'PUT' },
            'delete':{method:'DELETE'},
            'list': {method: 'GET', isArray: true },
            'getTable': {method: 'GET', isArray: true }
        });
}])

和控制器:

.controller('SideNavController', function ($scope, $http, $state, $auth, Account, $stateParams, Tables, $rootScope, TableData) {



    TableData.list().$promise.then(function(tables){
        $scope.tables = tables;
    });

    $scope.getTable = function(table){
        TableData.getTable({table:table}).$promise.then(function(table){
            $scope.selectedTable = table;
        });
    }
});

和主控制器:

.controller('ManagerCtrl', function($scope, $auth, Account, $http, $rootScope, ParamData, UserData, DocParamData, DocTypeData, ParamTypeData, ParamValueData, SysParamValuesData, TableData ) {

    $scope.selectedTable = TableData.getTable();
})

我将如何分享这些数据?我怎样才能传递table参数?

1 个答案:

答案 0 :(得分:0)

您可以将表与$ rootScope关联的一种方法,因为它是angular中所有$ scope的父作用域,因此可以访问两个控制器。

代码:

.controller('SideNavController',函数($ scope,$ http,$ state,$ auth,Account,$ stateParams,Tables,$ rootScope,TableData){

TableData.list().$promise.then(function(tables){
    $scope.tables = tables;
});

$scope.getTable = function(table){
    TableData.getTable({table:table}).$promise.then(function(table){
        $rootScope.selectedTable = table;
    });
} 

});

现在可以在两个控制器中访问这个$ rootScope.selectedTable。

第二种方法,您可以编写一个角度服务,您可以在其中放置getTable()方法。

代码:

app.service('MyService',function($ http,TableData){     this.getTable = function(table,callback){         TableData.getTable({表:表})$ promise.then(函数(表){             回调(表);         });     } });

现在您可以注入此服务并调用getTable()方法,该方法会将表obj传递给回调。

.controller('ManagerCtrl', function($scope, $auth, Account, $http, $rootScope, ParamData, UserData, DocParamData, DocTypeData, ParamTypeData, ParamValueData, SysParamValuesData, TableData, MyService ) {

    MyService.getTable(table, function(table) {
        $scope.selectedTable = table;
    });
})