2016-03-02 168 views
2

在控制器中,我想在兩個函數之間共享數據。例如:angularjs在函數之間共享變量

controllers.controller('rightDrawerCtrl', function ($scope, $http) { 
    $scope.shared_id; 

    $scope.getId = function() { 
    // get the id via $http, using a secondary id to retrieve the shared_id 
    } 

    $scope.useId = function() { 
    // use the shared_id to make a different api call 
    } 

}); 

但是在本例中,當調用useId()時,shared_id是未定義的。

我認爲這是因爲useId是'創建',而shared_id是未定義的,所以沒有被通知新的值。

我發現,通過使用兩個控制器來解決這個問題的唯一途徑:Share data between AngularJS controllers

有沒有更好的方式來做到這一點,只使用1個控制器?

+0

如果您必須使用此方法,請在shared_id周圍添加一個超時以首先啓動它。 –

回答

0

貌似我根本就包在$範圍變量賦值。$應用

$scope.$apply(function() { 
    $scope.shared_id = 1234; 
}); 
1
$scope.shared_id; 

上述聲明$scopeshared_id變量應該是不確定的後 - 因爲你沒有指定任何價值。

儘管如此,變量仍可在任何示波器功能內訪問,因爲$scope對於它們是全局的。不要忘記,你應該在所有地方訪問它像$scope.shared_id

但是,如果您按以下方式初始化:

$scope.shared_id = 'no id'; 

..它不會返回undefined。

您也可以通過ng-init初始化此變量。

+0

雖然這會阻止它返回'未定義' - 我無法訪問自從初始化 – SpottedMagpie

+0

創建小提琴以來對變量所做的任何更改。 –

0

getId()函數從$ http請求獲取結果時調用userId()函數。

+0

不幸的是,getId必須獨立於useId來調用。我已經調整了這個例子來說明這一點。 – SpottedMagpie

0

您可以使用像這樣用this要容易得多。

var self = this; 
this.shared_id; 


    $scope.getId = function() { 
    console.log(self.shared_id) ; 
    } 

    $scope.useId = function() { 
    console.log(self.shared_id) ; 
    }