Обещание в контроллере приложения meanjs не является функцией

В моем приложении meanjs, созданном с использованием генератора meanjs и автоматически сгенерированного CRUD-модуля, для дохода ниже я хочу настроить обещание, возвращаемое методом get, чтобы я мог вызывать методы и выполнять преобразования для полученных данных. Итак, я пытаюсь изменить его в своем контроллере:

// Find existing Income
    $scope.findOne = function() {
        Incomes.get({
            incomeId: $stateParams.incomeId
    }).then(function(income){
       $scope.income = income;
       $scope.incomeDollar= income*$scope.dollarRate;
    });

Это только дает мне ошибку: undefined не является функцией, а указывает на то. Что я здесь делаю неправильно? Как я могу преобразовать данные, полученные из метода get выше?

Шаблон, который я пытаюсь использовать, находится в конце статьи здесь< /а>. Я хочу переключиться с короткой версии на длинную, чтобы я мог делать больше вещей в своем обратном вызове.

// LONG:

myModule.controller('HelloCtrl', function($scope, HelloWorld) {

  HelloWorld.getMessages().then(function(messages) {
    $scope.messages = messages;
  });

});

Чтобы упростить это, автор статьи поместил обещание, возвращаемое getMessages, в область видимости:

// SHORTER:

myModule.controller('HelloCtrl', function($scope, HelloWorld) {

  $scope.messages = HelloWorld.getMessages();

});

person David Karlsson    schedule 07.12.2014    source источник
comment
Не могли бы вы опубликовать определение службы доходов?   -  person udalmik    schedule 07.12.2014
comment
Я использую абстрактный рабочий процесс, служба доходов не настроена для получения, только для размещения. Как показано в этот шаблон, который был использован   -  person David Karlsson    schedule 07.12.2014
comment
Более короткий способ getMessages больше не доступен в Angular (1.3), проверьте: docs.angularjs.org/ руководство/миграция   -  person Walter Brand    schedule 07.12.2014


Ответы (1)


Доступ к объекту обещания можно получить с помощью $promise. Из документа.

Экземпляры и коллекции Resource имеют следующие дополнительные свойства:

$promise: обещание исходного взаимодействия с сервером, которое создало этот экземпляр или коллекцию.

В случае успеха обещание разрешается с тем же экземпляром ресурса или объектом коллекции, обновленным данными с сервера...

Итак, ваш код должен выглядеть так:

// Find existing Income
$scope.findOne = function() {
    Incomes.get({
        incomeId: $stateParams.incomeId
}).$promise.then(function(income){
   $scope.income = income;
   $scope.incomeDollar= income*$scope.dollarRate;
});
person Trojanware    schedule 07.12.2014