【问题标题】:Angularjs how to load div content only after init method calledAngularjs如何仅在调用init方法后加载div内容
【发布时间】:2019-03-12 18:12:09
【问题描述】:

我是 AngularJs 的新手,最初是在页面加载时,即。当 loadResponseData() 正在处理时,我需要显示进度 div,并且在 ajax 调用完成后需要显示带有响应数据的成功 div。但没有显示成功 loadResponseData() 完成后。有没有办法在完成 ajax 调用之前显示进度条,并且应该在收到来自 ajax 调用的响应后显示成功 div。对不起我的英语,请保存我的一天。

<%
PayBean payBean = (PayBean) session.getAttribute("payData");
%>

<div ng-controller="payCtrl" ng-init="loadResponseData()" id="loadResponseData">

<div class="row">
    <div class="col-12 col-md-12 col-sm-12 col-lg-8">
        <form id="response">
            <div class="row row-space" ng-if="status=='success'">
                // load response data in elements
            </div>
            <div class="row row-space" ng-if="status=='progress'">
                // Progress bar takes place
            </div>
        </form>
    </div>
<div>

payCtrl中的方法:

$scope.loadResponseData = function() {
    $http.post(contextRoot + getResponseData(function(data) {
        var status = sessionStorage.getItem("status");
        $scope.status  = status ;
        sessionStorage.setItem('data', JSON.stringify(data));
    });
};

【问题讨论】:

  • status 是什么?你在哪里声明的?
  • 它在 angularjs 控制器的 loadResponseData 方法中声明
  • 因为您使用的是 ng-if 指令,它会创建新的范围,因此 status 不可见。尝试使用 controllerAs 语法或使用 ng-hideng-show 指令。
  • Hadi.. 我最初可以获取状态为进度.. 但是在 ajax 方法 loadResponseData 完成后页面不刷新

标签: java angularjs spring-mvc


【解决方案1】:

因为您使用的是ng-if 指令,所以它会创建新范围,因此状态不可见。尝试使用controllerAs 语法或使用ng-hideng-show 指令。

试试这个

<div ng-controller="payCtrl as vm" ng-init="vm.loadResponseData()" id="loadResponseData">

<div class="row">
  <div class="col-12 col-md-12 col-sm-12 col-lg-8">
    <form id="response">
        <div class="row row-space" ng-if="vm.status=='success'">
            // load response data in elements
        </div>
        <div class="row row-space" ng-if="vm.status=='progress'">
            // Progress bar takes place
        </div>
    </form>
   </div>
 <div>

在控制器中使用var vm = this; 而不是$scope

 var vm = this;
 vm.loadResponseData = function() {
 vm.post(contextRoot + getResponseData(function(data) {
    var status = sessionStorage.getItem("status");
    vm.status  = status ;
    sessionStorage.setItem('data', JSON.stringify(data));
 });
};

【讨论】:

  • Hadi,在调用 loadResponseData 后能够获取更新的 payBean
  • 我们可以在加载响应数据后使用新的视图jsp加载并重定向到usccess页面
【解决方案2】:

在此处尝试此示例 $timeout 指令替换为 $http 并使用 ng-show 而不是 ng-if

var app = angular.module('app',[]);
app.controller('payCtrl',function($timeout,$scope){
    $scope.status = "progress"; //by default set as progress
    
    $scope.loadResponseData = function() {
        console.log("yes called");
        $timeout(function(){
             $scope.status = "success";
        },2000);
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='app' class="container" ng-controller="payCtrl" ng-init="loadResponseData()" id="oadResponseData">

  <div class="row">
    <div class="col-12 col-md-12 col-sm-12 col-lg-8 center">
      <form id="response" class="success">
        <div class="row row-space" ng-show="status== 'success'">
          <h1>success code loaded</h1>
        </div>
        <div class="row row-space" ng-show="status== 'progress'">
          <h1>Progress code loaded</h1>
        </div>
      </form>
    </div>
    <div>

【讨论】:

  • Jignesh,在调用 loadResponseData 后能够获取更新的 payBean
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多