AngularJS$http.get函数未第二次执行
我需要使用angularjs创建一个多选下拉列表,其值来自基于不同参数的数据库。当页面第一次加载时,它工作正常。如果第二次访问此页面,则$http.get函数不会执行,并且仍然显示与第一次页面加载相同的数据。AngularJS$http.get函数未第二次执行,angularjs,json,asp.net-mvc-4,Angularjs,Json,Asp.net Mvc 4,我需要使用angularjs创建一个多选下拉列表,其值来自基于不同参数的数据库。当页面第一次加载时,它工作正常。如果第二次访问此页面,则$http.get函数不会执行,并且仍然显示与第一次页面加载相同的数据。 这是我的.js文件: var app = angular.module("myModule", ["angularjs-dropdown-multiselect"]); app.controller("myController", ['$scope','$http', function (
这是我的.js文件:
var app = angular.module("myModule", ["angularjs-dropdown-multiselect"]);
app.controller("myController", ['$scope','$http', function ($scope,$http) {
$scope.AllDescriptions = [];
$scope.DescriptionsSelected = [];
$scope.dropdownSetting = {
scrollable: true,
scrollableHeight: '200px'
};
$http.get('/Areaname/ControllerName/MethodName').then(function (data) {
angular.forEach(data.data, function (value, index) {
$scope.AllDescriptions.push({ id: value, label: value });
});
});
}])
这是我的html文件:
<div ng-app="myModule" ng-controller="myController" >
<div class="container">
<div id="divRight" style="min-height:5px;display: inline-block; width: 40%; vertical-align: top;">
<label style="float:left;">Error Description : </label>
<div style="float:left;width:200px;margin-left:10px" ng-dropdown-multiselect="" extra-settings="dropdownSetting" options="AllDescriptions" selected-model="DescriptionsSelected" checkboxes="true"></div>
</div>
</div>
</div>
错误说明:
这是我的.cs文件:
public JsonResult MethodName()
{
List<string> errorDescriptions = //Get from server
return new JsonResult() { Data=errorDescriptions,JsonRequestBehavior=JsonRequestBehavior.AllowGet};
}
publicjsonresult方法名()
{
List errorDescriptions=//从服务器获取
返回新的JsonResult(){Data=errorDescriptions,JsonRequestBehavior=JsonRequestBehavior.AllowGet};
}
请帮助我为每个页面请求而不是仅在第一个页面请求中执行此JSON方法。谢谢。我想问题在于缓存。尝试将get方法放在变量(
$scope.GetDescriptions=function(){$http.get…}
)中,并使用ng init指令
(
)。另外,在推送数组中的元素之前,请尝试清空数组($scope.AllDescriptions=[],$scope.AllDescriptions.push(…
)尝试添加$route.reload(),这将重新初始化控制器,而不是服务:
app.controller("myController", ['$scope','$http','$route' function ($scope,$http,$route) {
$route.reload(); // try pass parameter true to force
$scope.AllDescriptions = [];
$scope.DescriptionsSelected = [];
$scope.dropdownSetting = {
scrollable: true,
scrollableHeight: '200px'
};
$http.get('/Areaname/ControllerName/MethodName').then(function (data) {
angular.forEach(data.data, function (value, index) {
$scope.AllDescriptions.push({ id: value, label: value });
});
});
}])
如果要重置应用程序的整个状态,可以使用$window.location.reload();而不是按如下方式路由:
app.controller("myController", ['$scope','$http','$route' function ($scope,$http,$route) {
$window.location.reload(); // try pass parameter true to force
$scope.AllDescriptions = [];
$scope.DescriptionsSelected = [];
$scope.dropdownSetting = {
scrollable: true,
scrollableHeight: '200px'
};
$http.get('/Areaname/ControllerName/MethodName').then(function (data) {
angular.forEach(data.data, function (value, index) {
$scope.AllDescriptions.push({ id: value, label: value });
});
});
}])
希望这能起作用。您说在刷新web(如F5)或在控制器之间导航(使用$state.go)时未调用http.get()我认为问题在于bcoz的缓存。如果视图中没有更改,angular会从缓存加载页面。因此,通过清除缓存进行检查,也可以将缓存设为false。@Javierif:在这两种情况下,值都不会刷新。谢谢you@Ved:你能指导我怎么做吗?我对这个angularJS不熟悉。谢谢you@ManojNayak在stateProvider add cache:False谢谢您的解决方案。但很抱歉,这对我没有帮助。第一个解决方案在内部抛出一些错误,下拉列表中没有填充值。第二个解决方案使页面继续无停止地重新加载。您能在JSFIDLE中举一些例子吗?