如何在angularjs中完成网络调用时允许排序

时间:2017-06-14 13:57:12

标签: javascript angularjs promise angular-promise

我有一个函数,我打电话来拼接一些项目列表,并进行网络调用以将新排序的列表发送到数据库。

我的问题是我想只允许用户在网络通话结束后重新订购。我试图用一种承诺方法做到这一点,但似乎对我不起作用。

我将一个变量设置为false并在网络调用完成后将其更改为true ...我的方法可能是错误的,所以如果某人之前做过类似的事情,我们会感激一些建议。

这是我到目前为止所拥有的......

$scope.moveDown = function(array, element) {
        var index = array.indexOf(element);
        var completed = false;

        if(index === -1){
          return false;
        }

        if(array[index + 1] && completed === true){
          // rearranging elements
          array.splice(index, 2, array[index + 1], array[index]);
          // network call
          teacherList.saveOrder(id, teachers).then(function(resolve) {
            resolve(completed === true);
          });
        }else {
          // Do nothing
          return 0;
        }
      };

1 个答案:

答案 0 :(得分:0)

角度你必须使用承诺。

首先;在控制器中添加promise依赖项:$q

然后;更新您的网络电话是一个承诺:

       var myService = function() {

                var d = $q.defer();

                var configQuery = {
                    'url': myUri,
                    'method': "GET"
                };
                $http(configQuery).then(function(res) {


                    d.resolve(res);

                }, function(err) {
                    d.reject(err);
                })

                return d.promise;


            }

请注意,$ http已经是一个承诺;我把它分开来更清楚我的解释。

最后;在承诺完成后调用您的代码:

//call your http promise
myService().then(function(){
    //success add your function call
    $scope. moveDown()
}, function(err){
//error callback
});

修改---

如果您愿意,可以将您的电话添加到$ http成功回复中:

var myFunction = function(){
    $http(configQuery).then(function(res) {
        $scope. moveDown()

    }, function(err) {

    });
 }