$http請求是一個非同步操作,執行SecondController時並不能保證這個時候已經取得到資料了
你如果要把$http封到自己的服務中,必須了解$q和promise模式,此時相當於你在用同步的思想在做非同步的操作。
我們的專案中也有很多這種問題,簡單說下我目前的解決方法。和上面一樣也是封裝了個service , 用http去請求數據,回來數據的時候存一份到緩存,所有controller要數據都走這個service,保證數據的一致。
一般封裝server時基本上都會用promise進行封裝的。 (推薦做法)
題主不想用promise,那就使用callback也能解決問題。
還有一個想法就是使用事件通知,當server取得到資料後,利用事件通知controller.
樓上說了 使用callback可以解決 我試了一下 成功了 分享一下代碼,希望對你有用
send() 是keyup事件 來動態取得 第一個控制器裡面的輸入值
var app = angular.module("zgeApp",[]); app.controller('firstCtrl', ['$scope','change', function($scope,change){ $scope.send = function(){ change.callback($scope.name) } }]) app.controller('secondCtrl', ['$scope','change', function($scope,change){ change.callback = function(data){ $scope.name1 = data; } }]) app.service("change",function(){ return {}; })
$http請求是一個非同步操作,執行SecondController時並不能保證這個時候已經取得到資料了
你如果要把$http封到自己的服務中,必須了解$q和promise模式,此時相當於你在用同步的思想在做非同步的操作。
我們的專案中也有很多這種問題,簡單說下我目前的解決方法。和上面一樣也是封裝了個service , 用http去請求數據,回來數據的時候存一份到緩存,所有controller要數據都走這個service,保證數據的一致。
一般封裝server時基本上都會用promise進行封裝的。 (推薦做法)
題主不想用promise,那就使用callback也能解決問題。
還有一個想法就是使用事件通知,當server取得到資料後,利用事件通知controller.
樓上說了 使用callback可以解決 我試了一下 成功了 分享一下代碼,希望對你有用
send() 是keyup事件 來動態取得 第一個控制器裡面的輸入值