Совместное использование данных с $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;
});
})