2013-08-12 3 views
4

AngularJS github에 an issue을 올렸지 만 많은 관심을 받고있는 것 같지 않고 꽤 낮기 때문에 직접 고칠 수 없었습니다. 수준의 문제이므로 해결 방법을 찾아야한다고 생각합니다.AngularJS - 약속을 반환하는 함수를 보는 것/

각도를 사용하면 약속 (또는 .then(...) 기능이있는 항목)을 범위에 넣을 수 있으며 해결되면 모든 $ watches와 그 약속에 바인딩 된 모든 것이 확인 된 값을 사용합니다. 이 문제는 함수를 사용하여 약속을 반환 할 때 발생합니다. 동일한 기능이 적용되지 않습니다. 일반 객체처럼 처리됩니다. 예를 들어

:

var helloDef = $.Deferred(); 
$scope.hello = helloDef.promise(); 

$scope.getHello = function() { 
    return $scope.hello; 
}; 

$timeout(function() { 
    helloDef.resolve('Hello!'); 
}, 1000); 

Fiddle

여기 ng-bind="hello" 안녕하세요 을 잘 작동 출력 사용!이지만 ng-bind="getHello()" 출력 [object Object]은 내부 $ watch가 promise 객체를 반환하기 때문에 출력됩니다. $ .Deferred 대신 $ q를 사용하는 것과 같은 방식으로 작동합니다.

실제 코드에서는 함수를 호출 할 때 처음으로 약속을 작성하므로 약속을 미리 작성하고 범위에서 참조 할 수는 없습니다.

또한 ng-bind 이상으로 필요하기 때문에이 경우를 제대로 처리하는 자체 바인딩 지시문을 사용할 수 없습니다.

누구든지 아이디어가 있습니까? 나는 현재 데이터가 해결되지 않은 경우 약속을 반환하고 실제 결과가 있다면이를 반환하지만 그게 작동 할 고통입니다. 데이터에 바인딩 된 모든 요소는 데이터를로드 할 때 간결한 부작용을 일으 킵니다. 예를 들어 해결 된 값 대신 약속 객체를 사용하여 요소를 만드는 ngRepeat가 있습니다.

감사합니다.

UPDATE : 풀 요청 : https://github.com/angular/angular.js/pull/3605

업데이트 2 : 나중에 참조 할 수 있도록는 자동 약속 랩핑 해제는 1.2 brach에 사용되지 않습니다.

+2

ng-bind는 함수가 아닌 표현식을 사용합니다. 이것은 $ parse 모듈에 의해 결정됩니다. – zsong

+1

함수 호출은 유효한 표현식이며 양방향 바인딩에서는 사용할 수 없습니다. 'getHello()'가 약속 대신에 문자열을 반환한다면 잘 동작 할 것이다. –

답변

0

Pull request이 병합 된 경우 1.2.0으로 고정해야하므로 답변으로 표시하겠습니다.

+0

질문 자체에서 언급했듯이이 기능은 stable 1.2를 치기 전에 제거되었습니다. –

1

어떤 경우에는 $ resource을 사용합니다.

var r = $resource...get... 
var p = r.$then... 

그렇지 않으면, 내가 약속하지 내 자신의 자원과 같은 객체를 구축,하지만 난 기다릴 수있는 약속이있다 : 나는 그것을 기다릴 필요가있는 경우, $는 잘 작동합니다.

+0

불행히도 $ resource가 요청하는 방식과 호환되지 않는 요청 번들링 메커니즘을 사용하고 있습니다. –

관련 문제