2014-12-31 3 views
1

Я маршрутизатор, который ждет эти свойства должны быть решеныAngularJS Promise решен неправильно

$stateProvider.state('friends', { 
      url: '/friends/{id}', 
      templateUrl: '/friends.html', 
      controller: 'friendsCtrl', 
      resolve: { 
       friend: ['$stateParams', 'friends', function($stateParams, friends){ 
        return friends.get($stateParams.id); 
       }], 
       notes: ['$stateParams', 'friends', function($stateParams, friends){ 
        return friends.getNotes($stateParams.id); 
       }] 
      } 
     }); 

Это friends.get и friends.getNotes.

friends.get = function(id){ 
     return $http.get('/friends/' + id).then(function(res){ 
      return res.data; 
     }); 
    }; 

    friends.getNotes = function(id){ 
     return $http.get('/friends/' + id + '/notes').then(function(res){ 
      console.log(res.data); 
      return res.data; 
     }); 
    }; etc... (10 more methods) 

Друзья - это объект с приблизительно 12 различными методами, getNotes и просто быть двумя из них. Я проверил консольный журнал для getNotes и получил. get возвращает объект-друга (как я хочу), и getNotes возвращает массив заметок (также, как я и хотел).

Эта проблема входит в контроллер. Друг получает разрешение на объект друга, как я хочу. ОДНАКО, заметки решают, как весь объект друзей (это не массив, он буквально является объектом друзей с такими методами, как get и getNotes).

Это, как я впрыснуть друга и заметки в контроллер

app.controller('friendsCtrl', ['$scope', 'friend', 'notes', 'friends', 
    function($scope, friend, friends, notes){ 
     $scope.doComment = false; 
     $scope.friend = friend; 
     console.log(friend); 
     $scope.notes = notes; 
     console.log(notes); 

друг Logging дает мне объект другу. Запись записей не дает мне массив заметок, как ожидалось, скорее я получаю объект ENTIRE friends. Поэтому вместо [note1, note2, note3] я получаю Object с методами getNotes, get и т. Д. Любые идеи, почему я получаю объект друзей, а не массив примечаний в заметках?

ответ

2

Порядок внесенных работ неверен. Должно быть

function($scope, friend, notes, friends) 

в соответствии с ['$scope', 'friend', 'notes', 'friends', function() {...}.

+0

Wow lifesaver .. Не понял, что требовалось заказать. Я приму ответ после истечения срока. Благодаря!! – user3340037

+2

Да, весь смысл этой записи массива - указать порядок обслуживания. Службы будут впрыскиваться в соответствии с порядком строк, поэтому после минимизации, когда аргументы функции становятся 'function (a, b, c, d) {}' Angular все еще может понять, что 'a' является' $ scope', 'b' это 'firend' и т. д. – dfsq

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