Функция контроллера 'Init' выполнена более одного раза - PullRequest
0 голосов
/ 08 июня 2018

Это мой контроллер

//init
var init = function () {

    $scope.getAlbumList();

};    

$scope.getAlbumList = function () {

    AlbumService.getAlbumList()
        .then(function (data) {
            $scope.albumList = data;
    });

};

$scope.viewAlbum = function () {

    AlbumService.getAlbum()
        .then(function (data) {
            $scope.album = data;
            $location.path("/album");
        });               

};

init();

, а это мой routeProvider

   when('/albums', {
        templateUrl: 'WebApp/albums.html',
        controller: 'AlbumController'

    }).


    when('/album', {
        templateUrl: 'WebApp/albumview.html',
        controller: 'AlbumController'
    }).

Таким образом, AlbumController обрабатывает как альбомы, так и страницы просмотра альбомов.Когда создается контроллер, вызывается функция init, которая, в свою очередь, вызывает функцию getAlbumList.

Проблема заключается в том, что контроллер создается снова, когда пользователь щелкает альбом, чтобы перейти на страницу просмотра альбома.,Это завершает выполнение функции init снова, что, в свою очередь, вызывает нежелательный второй вызов getAlbumList.

Так что, в принципе, мне нужно вызвать getAlbumList при создании контроллера для «/ album», но не «/ albumview».

Как мне этого добиться?Очевидно, я мог бы решить эту проблему, создав второй контроллер для /albumview, но это кажется ненужным, и я бы предпочел, чтобы все, что касается альбомов, было на одном контроллере.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Это произойдет, если у вас есть controller: 'AlbumController' в роутере, а у вашего html ng-controller = "AlbumController".Используйте только один, чтобы избежать двойной инициализации.

0 голосов
/ 08 июня 2018

У вас есть 2 решения:

  1. в тесте вашего контроллера, если location.path () == 'album'
  2. на html-странице альбомов ng-init="getAlbumList()"
0 голосов
/ 08 июня 2018

Вероятно, самый быстрый вариант - проверить путь, чтобы увидеть, находитесь ли вы в альбоме или альбомах.Вот пример кода, как это сделать:

if ($location.url().toLowerCase() === '/albums') {
  // call to getAlbumList here 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...