0

使用此服务执行承诺:

使用此服务来执行承诺:改进 AngularJS 简单工厂 - 围绕 PhoneGap 存储 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/

4

2 回答 2

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;
    });
于 2013-10-21T06:26:53.563 回答
0

我不明白为什么,但是在服务中复制对象:

改进 AngularJS 简单工厂 - PhoneGap 存储 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);
}
于 2013-10-21T09:27:13.393 回答