为了账号安全,请及时绑定邮箱和手机立即绑定

Angularjs 如何仅在调用 init 方法后加载 div 内容

Angularjs 如何仅在调用 init 方法后加载 div 内容

慕慕森 2021-11-03 16:58:45
我是 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));    });};
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

在here$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>


查看完整回答
反对 回复 2021-11-03
?
holdtom

TA贡献1805条经验 获得超10个赞

因为您正在使用ng-if指令,它会创建新的范围,因此状态不可见。尝试使用controllerAs语法或使用ng-hide或ng-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));

 });

};


查看完整回答
反对 回复 2021-11-03
  • 2 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信