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

0

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

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

.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();
})

как я могу поделиться этими данными? как я могу передать параметр th table?

Теги:
angular-services
angular-resource

1 ответ

0

Один из способов сопоставления таблицы с $ rootScope, и поскольку она является родительской областью всей области $ 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({table: table}). $ prom.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;
    });
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню