Совместное использование данных с $resource и необязательным параметром

Я пытаюсь обмениваться данными между контроллерами - мой боковой навигационный контроллер со списком таблиц и мой главный контроллер, управляющий самой таблицей..

мой сервис довольно прост:

.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 ответ

Одним способом вы можете связать таблицу с $rootScope, и, поскольку она является родительской областью для всей области $ в angular, таблица может быть доступна обоим контроллерам.

Код:

.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 ({table: table}). $ обещание.then(function(table){ callback(Таблица); }); } });

Теперь вы можете внедрить этот сервис и вызвать метод 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;
    });
})
Другие вопросы по тегам