Я пытаюсь обмениваться данными между контроллерами - мой контроллер боковой навигации со списком таблиц, а мой главный контроллер управляет самой таблицей.
мой сервис довольно прост:
.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
?
Один из способов сопоставления таблицы с $ 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;
});
})