Angularjs不会更新$ scope

时间:2017-05-15 09:13:24

标签: javascript angularjs ionic-framework

我的控制器无法更新Gui $scope。 经过一些研究,我发现你可以使用$timeout

该服务在不同的单位上花费不同的时间,我不希望设置为5000超时因为应用程序感觉很慢。 还有其他办法吗?

.service('RowService', function ($q) {

var rows = undefined;
this.getrows = function (id) {
  var local = new PouchDB('db');
  var deferred = $q.defer();
  //      var rows = [];
  local.query(function (doc, emit) {
    emit(doc.type);
  }, { key: 'row_detail' }).then(function (result) {
    var rows = [];
    for (i = 0; i < result.rows.length; i++) {
      local.get(result.rows[i].id).then(function (response) {
        if (response.orderid == orderId) {
          rows.push(response);
        }
        deferred.resolve(rows);
      })
    }
  }).catch(function (err) {
    // handle any errors
  });

  rows = deferred.promise;

  return $q.when(rows);
}

})


RowService.getrows($stateParams.id).then(function (data) {

    // Not working example
    $scope.rows = data;
    // Working example

  $timeout(function () {
    $scope.rows = data;
  }, 5000)

}

2 个答案:

答案 0 :(得分:0)

$ scope。$ apply()有时会导致问题,但可以毫不拖延地调用$ timeout:

.service('RowService', function ($q) {

var rows = undefined;
this.getrows = function (id) {
  var local = new PouchDB('db');
  var deferred = $q.defer();
  //      var rows = [];
  local.query(function (doc, emit) {
    emit(doc.type);
  }, { key: 'row_detail' }).then(function (result) {
    var rows = [];
    for (i = 0; i < result.rows.length; i++) {
      local.get(result.rows[i].id).then(function (response) {
        if (response.orderid == orderId) {
          rows.push(response);
        }
        deferred.resolve(rows);
      })
    }
  }).catch(function (err) {
    // handle any errors
  });

  rows = deferred.promise;

  return $q.when(rows);
}

})


RowService.getrows($stateParams.id).then(function (data) {

    // Not working example
    $scope.rows = data;
    // Working example

  $timeout(function () {
    $scope.rows = data;
  })

}

答案 1 :(得分:0)

然后不提供它将起作用的超时值,并且在执行所有功能后将调用该函数。此外,您在服务中起诉承诺,因此您不需要超时值。