AngularJS $ http.get函数第二次没有执行

时间:2016-06-23 08:23:27

标签: angularjs json asp.net-mvc-4

我需要使用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方法,而不是仅在第一页请求中执行。谢谢。

2 个答案:

答案 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 });
            });
        });
}])

希望这有效。