搜尋

首頁  >  問答  >  主體

angular.js - angularjs中關於非同步載入的資料在controller之間共享的問題?

雷雷
某草草某草草2745 天前564

全部回覆(5)我來回復

  • PHPz

    PHPz2017-05-15 17:01:38

    $http請求是一個非同步操作,執行SecondController時並不能保證這個時候已經取得到資料了

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-15 17:01:38

    你如果要把$http封到自己的服務中,必須了解$q和promise模式,此時相當於你在用同步的思想在做非同步的操作。

    回覆
    0
  • 某草草

    某草草2017-05-15 17:01:38

    我們的專案中也有很多這種問題,簡單說下我目前的解決方法。和上面一樣也是封裝了個service , 用http去請求數據,回來數據的時候存一份到緩存,所有controller要數據都走這個service,保證數據的一致。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-15 17:01:38

    一般封裝server時基本上都會用promise進行封裝的。 (推薦做法)

    題主不想用promise,那就使用callback也能解決問題。

    還有一個想法就是使用事件通知,當server取得到資料後,利用事件通知controller.

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-15 17:01:38

    樓上說了 使用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 {};
        })

    回覆
    0
  • 取消回覆