我在控制器之間共享數據時遇到問題。AngularJS:如何使用服務來檢索數據並在控制器之間共享?
我用2個獨立的控制器創建了一個頁面。一個帶有搜索表單,另一個帶有表格以顯示搜索結果。
我已經創建了這兩個獨立的控制器來保持事物的清潔,並讓每個控制器處理其各自的屏幕部分。因此,我將處理搜索的邏輯和檢索結果的邏輯放入一個注入兩個控制器的服務中。 服務的search()方法用結果設置數據屬性,並將result屬性設置爲控制器內的$ scope屬性。
我認爲它是這樣工作的,但它沒有。數據被正確檢索並設置爲服務屬性,但不會反映到控制器屬性中。我在這裏做錯了什麼或缺少什麼?
任何幫助非常感謝!
代碼:兩個控制器之間http://jsfiddle.net/0a75uh34/3/
var app = angular.module('app', []);
app.controller('searchController', [
'$scope', 'searchService',
function ($scope, searchService) {
$scope.search = {};
$scope.data = searchService.data;
$scope.submit = function() {
searchService.search($scope.search);
}
}]);
app.controller('searchListController', [
'$scope', 'searchService',
function ($scope, searchService) {
$scope.data = searchService.data;
$scope.test = function() {
console.log($scope.firms.length);
}
}]);
app.factory('searchService', [
'$http',
function ($http) {
return {
data: [],
search: function (params) {
var this$ = this;
$http.post('/echo/json/', params)
.success(function (result) {
this$.data = result;
})
.error(function() {
console.log('Oops...');
});
}
}
}]);
你撥弄沒有搜索數據,單擊按鈕不會發生任何事情。 – CrazyGeek 2014-11-21 12:45:04
我遺漏了搜索實現,因爲這不是問題。我更改了示例代碼以返回一些虛擬數據:http://jsfiddle.net/ranthonissen/0a75uh34/5/ – ranthonissen 2014-11-21 12:56:26