自动调用ngservice方法并停止应用程序

时间:2018-02-07 16:06:02

标签: asp.net angularjs

我的应用程序有一些下拉菜单和一个搜索按钮。从下拉列表中选择单击搜索按钮。它将根据选定的值显示结果。我正在使用web api从数据库中获取数据。角度服务将调用那些api方法

 //for family dropdown
this.getProresultByseriesFamily = function (family) {
    var res;
    if (family !== 0) {
        res = $http.get("/api/KendoCascading/GetProresult/" + family);
        return res;
    }
};
//for class dropdown
this.getFuseClassRes = function (fuseClass) {
    var res;
    if (fuseClass !== null) {
        res = $http.get("/api/KendoCascading/GetResFuse/" + fuseClass);
        return res;
    }
};
//for series dropdown
this.getresSeries = function (seID) {
    var res;
    if (seID !== 0) {
        res = $http.get("/api/KendoCascading/GetSeriesResult/" + seID);
        return res;
    }
};

控制器

$scope.getProResult = function () {
    if ($scope.SelectedCriteria != null || $scope.SelectedCriteria!="") {
        var promise = ngservice.getProresultByseriesFamily($scope.SelectedCriteria);
        promise.then(function (resp) {
            console.log(resp.data);
            $scope.Products = resp.data;
            alert("successful1");
        }, function (err) {
            alert("Falied");
        });
    }
    if ($scope.FuseModel != null || $scope.FuseModel != "") {
        var promise = ngservice.getFuseClassRes($scope.FuseModel);
        promise.then(function (resp) {
            $scope.Products = resp.data;
            alert("successful2");
        }, function (err) {
            alert("failed");
        });
    }
  if ($scope.FuseSeriesModel != null || $scope.FuseSeriesModel != "") {
    var promise = ngservice.getresSeries($scope.FuseSeriesModel);
    promise.then(function (resp) {
        $scope.Products = resp.data;
        alert("successful");
    }, function (err) {
        alert("Failed");
    });
}

};

此控制器功能用作视图中的单击事件。如果我调用第一个服务方法,视图将填充结果。但一段时间后,它会自动调用第三个服务方法,应用程序停止工作。出了什么问题?如果有更好的解决方案,请帮助我。

api工作正常。我已经检查过浏览器。没关系。

查看

<Button type="button" ID="Btn_Search" Width="90" Class="btn btn-primary btn-sm" ng-click="getProResult();show=!show">Search</Button>

1 个答案:

答案 0 :(得分:0)

我认为问题是因为有时您的服务会返回undefined

在第三种情况下,哪一个有问题,如果$scope.FuseSeriesModel === 0ngservice.getresSeries($scope.FuseSeriesModel)将返回undefined并且因为您正在调用then而引发错误undefined

我建议您在致电.then之前更新代码以检查承诺。

例如:

if ($scope.FuseSeriesModel != null || $scope.FuseSeriesModel != "") {
  var promise = ngservice.getresSeries($scope.FuseSeriesModel);
  if (promise) {
    promise.then(function (resp) {
      $scope.Products = resp.data;
      alert("successful");
    }, function (err) {
      alert("Failed");
    });
  }
}

另一种方法是将您的if条件更新为!!$scope.FuseSeriesModel(或Boolean($scope.FuseSeriesModel))。这样,只有当值为Truthy时才会调用您的承诺代码,我认为这是您真正想做的事情:

if (Boolean($scope.FuseSeriesModel)) { // or $scope.FuseSeriesModel or !!$scope.FuseSeriesModel
  var promise = ngservice.getresSeries($scope.FuseSeriesModel);
  promise.then(function (resp) {
    $scope.Products = resp.data;
    alert("successful");
  }, function (err) {
    alert("Failed");
  }
);