在這個例子中,你並不需要明確的promise
。 $http
已經返回一個承諾,所以你真的不需要定義一個新的承諾。
我已經重新安排了一些代碼。爲了初始化該值,我使用ng-init
來調用getUser()
方法。這然後調用$http
並綁定到$scope.myUser
。順便說一句,我注意到,只有在進入error
回調。
因爲承諾是異步的,所以您必須綁定到success
或error
回調函數$http
內的$scope
。
它恢復到「舊」值的原因是因爲您直接綁定到函數getUser()
。這意味着角度設置了一個$watch
這個函數的返回值。
這是working fiddle。
HTML:
<h4>remote</h4>
<div ng-app="app" ng-controller="Ctrl" ng-init="init()">
<a href="#" editable-text="myUser.name" >
{{ myUser.name || 'not set!' }}
</a>
</div>
JS:
app.controller('Ctrl', function($scope, $http, $q) {
$scope.myUser = null;
$scope.init = function() {
getUser();
};
function getUser() {
return $http({
url : 'http://espn.com/images/test-data/public-profile.json',
method : 'GET',
})
.error(function(data) {
$scope.myUser = {"name":"bobby","age":"21"};
})
.success(function(data) {
console.log(data);
$scope.myUser = data;
});
};
});
沒準是爲'$ http'使用的服務在這種情況下返回一個承諾有一定道理....能只需返回'$ http' – charlietfl
@charlietfl好的,我會更新。順便說一句,我感到有點驚訝,解決的價值觀通過這一觀點。角度自動解開承諾嗎? –
已經閱讀過文檔...雖然仍然讓我感到困惑。如果它顯示在頁面中,會假設它已經是可編輯的對象 – charlietfl