我的应用程序有一些下拉菜单和一个搜索按钮。从下拉列表中选择单击搜索按钮。它将根据选定的值显示结果。我正在使用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>
答案 0 :(得分:0)
我认为问题是因为有时您的服务会返回undefined
。
在第三种情况下,哪一个有问题,如果$scope.FuseSeriesModel === 0
,ngservice.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");
}
);