我需要使用angularjs创建一个多选下拉列表,其值来自基于不同参数的数据库。我已经实现了以下代码。第一次加载页面时工作正常。如果第二次来到这个页面,$ http.get函数没有执行,仍然显示与第一页加载相同的数据。
这是我的.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};
}
请帮助我为每个页面请求执行此JSON方法,而不是仅在第一页请求中执行。谢谢。
答案 0 :(得分:0)
我认为问题在于缓存。尝试将get方法放在变量($scope.GetDescriptions = function () { $http.get... }
)中并使用ng-init指令
(<div class="container" ng-init="GetDescriptions()">
)。还要尝试在推送元素之前清空数组($scope.AllDescriptions = [], $scope.AllDescriptions.push(...
)
答案 1 :(得分:0)
尝试添加$ 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 });
});
});
}])
希望这有效。