使用此服务执行承诺:
使用此服务执行承诺:Improving AngularJS Simple Factory - wrapper around PhoneGap Storage API
我无法弄清楚,为什么我在使用ng-model指令和承诺时会遇到错误。
TypeError: Cannot assign to read only property 'favourite'
单击时
<div ng-controller="DishCtrl">
<input type="checkbox" name="favourite" ng-model="dish.favourite" required smart-float ng-click="markFavourite(dish)"/>
</div>
和控制器如下:
angular.module('App')
.controller('DishCtrl', function($scope, NotificationService, MediaService, SQLService, $routeParams, $rootScope) {
var dishId = $routeParams.dishId;
SQLService.getDish(dishId).then(function(results) {
$scope.dish= results;
});
如果我删除ng-model指令一切正常。所以我正确地解决了承诺。 我也尝试直接绑定模型 - 没有承诺和工作。 这是一个错误,还是我错过了什么?
我正在努力解决承诺,例如:http://jsfiddle.net/8HjgJ/
答案 0 :(得分:1)
在解决承诺之前,您是否尝试初始化范围变量?这样的事情:
angular.module('App')
.controller('DishCtrl', function($scope, NotificationService, MediaService, SQLService, $routeParams, $rootScope) {
$scope.dish = false; //Default value, will be updated when promisse is resolved
var dishId = $routeParams.dishId;
SQLService.getDish(dishId).then(function(results) {
$scope.dish= results;
});
答案 1 :(得分:0)
我不明白为什么,但在服务中复制对象:
Improving AngularJS Simple Factory - wrapper around PhoneGap Storage API
在解决承诺之前有帮助!
function querySelectSuccess(tx, results) {
var len = results.rows.length;
var output_results = [];
for (var i=0; i<len; i++){
console.log('ts',results.rows.item(i));
var temp_copy = angular.copy(results.rows.item(i));
output_results.push(temp_copy);
}
deferred.resolve(output_results);
}