Angular JS:赋值后未更新的值

时间:2017-05-11 18:40:48

标签: javascript angularjs

我在工厂http调用中分配后没有更新范围。

    var form = {}
    var requestForm = {}
    requestForm['name'] = $scope.brand.name;
    requestForm['country'] = $scope.brand.countryCode;

所以我将$scope.mergeId设置为初始化程序为值0,然后tableFactory.setMergeRequest将在工厂文件中调用http调用并返回一个对象,其中包含一个布尔值和一个id#

    $scope.mergeId = 0;
    //set merge request/id
    tableFactory.setMergeRequest(requestForm).then(function(data){

        if(data.mergeRequestStatus){

          console.log(data);

          $scope.mergeId = data.insertedRequestId; //456


        }else{
          console.log('no merge id');
        }

    });

    form['mergeId'] = $scope.mergeId;

布尔值为true,它应该将id(456)分配给$scope.mergeId。然后,该范围将用于分配将在另一个http调用中使用的form['mergeId']变量。

当我检查控制台时,表单变量为零,因此它不会更新。我取出了初始化程序,但后来说它是未定义的。 http调用正在发回数据,只是范围没有更新。

之前有没有人经历过这个问题?我应该更改此http呼叫的设置吗?我试过这个,但它没有设置正确的值,它正在设置一个对象。

form['mergeId'] = tableFactory.setMergeRequest(requestForm).then(function(data){

        if(data.mergeRequestStatus){

          return data.insertedRequestId

        }else{

          return null
        }

    });

我从这种方式得到的回应是,d,我如何获得价值?

enter image description here

请帮忙,我一直坚持这个问题。我们将非常感谢您的帮助。

附加信息

这是在tableFactory.setMergeRequest被触发的http呼叫。

var setMergeRequest = function(object){

      var mergeRequestCall = {
          method: 'POST',
          url: CONFIG.PYTHON_API_END_POINT + '/api/mergerequest',
          data: object
      }

      var d = $q.defer();

      $http(mergeRequestCall)
      .success(function(response){
        d.resolve(response);
      }).error(function(response){
        d.resolve([]);
      });


      return d.promise;
    }

回复是:

{
  "insertedRequestId": 456,
  "mergeRequestStatus": true
}

1 个答案:

答案 0 :(得分:0)

您应该设置解析promise的值,而不是将值设置为函数

tableFactory.setMergeRequest(requestForm).then(function(data){
        if(data.mergeRequestStatus){
          form['mergeId'] = data.insertedRequestId;
        }else{
          form['mergeId'] = null;
        }
    });