AngularJS承诺和ng-model

时间:2013-10-21 04:13:57

标签: angularjs

使用此服务执行承诺:

使用此服务执行承诺: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/

2 个答案:

答案 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);
}