1

Я пытаюсь использовать переменную между контроллером и функцией. Но я получаю сообщение об ошибке от контроллера, говоря так:Угловой: не удается получить доступ к переменным в контроллере с помощью службы

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 

}]); 

ответ

3

Вы имели дополнительно $mdToast в вашей заводской функции topicController, вам необходимо удалить его.

Причина, по которой она не работала, в настоящее время у вас есть 4 зависимостей, упомянутых в массиве, таких как ['$scope', '$http', '$mdDialog', 'shareData', function &, тогда вы используете свой экземпляр внутри функции рядом с массивом DI. Внутри этой функции у вас было 5 зависимостей, где $mdToast дополнительно. Итак, за сценой, что происходит $scope функции, удерживайте значение '$scope' DI-массив, так же как и вы направо налево. Но когда дело доходит до $mdToast (в функции контроллера), он держал значение 'shareData' (из массива DI) &, тогда следующий параметр shareData ничего не получил.

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

ПРИМЕЧАНИЕ: Вы используете DI inline array annotation, так что последовательность, в которой зависимость впрыскивают в массиве, в той же последовательности, вы должны вводить затем в основной функции фабрики.

+0

Большое спасибо! вы спасли мое драгоценное время! Но я не получаю точной причины, по которой я не смог получить к ней доступ, и удалив $ mdToast сделал волшебство –

+0

@jAYANTYADAV Я обновил свой ответ, подробно объяснив .. Я думаю, это поможет вам. Спасибо :) –

+0

Еще раз спасибо! Btw, что такое массив DI? Я имею в виду полную форму. –

Смежные вопросы