2014-01-22 2 views
2

Я читал в нескольких местах, что $ q изящно интегрируется в сферу применения в Angular JS. Предположим, что у вас есть это:

var superService = function() { 
    var deferred = $q.defer(); 
    deferred.resolve(['foo', 'bar']); 
    return deferred.promise; 
}; 

Конечно, $ д бесполезно здесь, но если я использую $ таймаут или запустить HTTP вызов $, результат тот же.

Если я это сделать:

superService().then(function(data) { 
    $scope.result = data; 
}); 

Это нормально. Но если я это сделаю:

$scope.result = superService(); 

Это также должно быть в порядке. Но в моем случае $ scope.result содержит 3 элемента (они видны в моем шаблоне с ng-repeat): функции «then», «catch» и «finally», я думаю ... вместо ['foo' , 'bar'], конечно.

Мой конкретный пример:

angular.module('myModule', []) 
    .factory('HelloWorld', function($q, $timeout) { 
    var getMessages = function() { 
     var deferred = $q.defer(); 
     deferred.resolve(['Hello', 'world']); 
     return deferred.promise; 
    };  
    return { 
     getMessages: getMessages 
    }; 
    }) 
    .controller('HelloCtrl', function($scope, HelloWorld) { 
    $scope.messages = HelloWorld.getMessages(); 
    //HelloWorld.getMessages().then(function(data) { 
    // $scope.messages = data; 
    //}); 
    }); 

Любая идея здесь?

+0

Я не вижу здесь вопроса. – Stewie

+1

Я знаком с тем, с чем он сталкивается, - см. Мой ответ - и это совершенно правильный, если не совсем ясный, быстрый взгляд. –

+0

Я вижу здесь проблему. Проблема приводит к вопросу. Прочитайте проблему, как прочитайте вопрос ... По крайней мере, один человек, похоже, понял мою проблему: он решен;) – neolitec

ответ

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