簡體   English   中英

Angular:無法使用服務訪問控制器中的變量

[英]Angular: Not able to access variables in controller using service

我正在嘗試在控制器和功能之間共享變量。 但是我從控制器收到一個錯誤,說:

TypeError: Cannot read property 'getSet' of undefined 

我已經看過許多教程,但是不知道我要去哪里錯了。 我的服務代碼是這樣的:

app.service('shareData', function() {

    var selected = ["plz", "print", "something"];

    var putSet = function(set) {
        selected = set;
    };

    var getSet = function() {
        return selected;
    };

    return {
        putSet: putSet,
        getSet: getSet
    };
});   

我可以從如下定義的函數中進行selected

setDisplay = function($scope, $mdDialog, shareData) {

    console.log(shareData.getSet()); // this is working

    $scope.selected = shareData.getSet();
    $scope.hide = function() {
        $mdDialog.hide();
    };
    $scope.cancel = function() {
        $mdDialog.cancel();
    };
    $scope.answer = function(answer) {
        $mdDialog.hide(answer);
    };
};

我的控制器是這樣的:

app.controller('topicController', ['$scope', '$http', '$mdDialog', 'shareData',
function ($scope, $http, $mdDialog, $mdToast, shareData) {

    console.log(shareData.getSet()); // NOT WORKING

}]); 

你有額外的$mdToasttopicController控制器的工廠函數,你需要將其刪除。

它不起作用的原因是,當前您在數組中提到了4個依賴項,例如['$scope', '$http', '$mdDialog', 'shareData', function ,然后在函數內使用它的實例到DI數組。 在該函數內部,實際上有5個依賴項,其中$mdToast額外。 因此,在后台發生的事情是函數$scope持有一個值'$scope' scope'DI數組,就像您從右到左一樣。 但是,當涉及到$mdToast (在控制器功能中)時,它持有的值是DI數組的'shareData'值,然后下一個參數shareData將什么也沒有得到。

app.controller('topicController', ['$scope', '$http', '$mdDialog', 'shareData', 
      function ($scope, $http, $mdDialog, shareData) { //<--removed $mdToast
    console.log(shareData.getSet());
  }
]);

注意:您正在使用DI內聯數組批注 ,因此將依存關系按順序插入數組的順序應相同,然后應按順序插入基礎工廠函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM