AngularJS表闪烁

时间:2018-11-01 19:30:24

标签: angularjs twitter-bootstrap

我有一个简单的AngularJS应用程序,该应用程序在用户登录后在ng-repeat上显示带有数据的表。我遇到一个问题,登录后,该表简要显示了空白行,然后显示了实际的数据行。有关如何解决此问题的任何建议?

这是登录的控制器:

  $scope.login = function(user) {
    loginSrvc.login(user).then(function(response) {
      if (response == "authentication failed") {
        $scope.error = true;
        $scope.user = {};
         $location.path("/");
      } else {
        if (response.group_name == "On Site Registration"){
             var data = {
               event: response.zk_event_id,
               group: response.zk_group_id
             };
             $scope.getAvailableCamper(data);

        }
        else if (!response.zk_group_id) {
                   $location.path("/form/" + response.zkp_camper_id);
             }
             else {
             $location.path("/dashboard/" + response.zk_event_id + "/" + response.zk_group_id);
             }
      }

    })
  }


$scope.getAvailableCamper = function(data) {
    dashboardSrvc.fetchGroup(data).then(function(response){
         var findAvailableCamper = _.find(response.data, {status: null});
         console.log("this is find", findAvailableCamper);
         var id = findAvailableCamper.zkp_camper_id;
        $location.path("/onSiteForm/" + id);

    })
  }

这是表格的控制器:

$scope.campers = function() {
    $scope.camper = loginSrvc.getCampers();
  }

  $scope.campers();

  $scope.fetchCampers = function(id) {
    dashboardSrvc.fetchCampers(id).then(function(response){
        $location.path("/form/" + id);
    })
  }

这是表格的html代码:

<tr ng-repeat="campers in camper">
            <td>{{$index + 1}}</td>
            <td>{{campers.name_first}}</td>
            <td>{{campers.name_last}}</td>
            <td><button type="submit" name="submit" ng-click="register(campers)" class="btn btn-success" role="button" ng-hide="campers.status == 'Submitted' "  ng-disabled="!(!!campers.name_first && !!campers.name_last && !!campers.gender && !!campers.city && !!campers.date_of_birth && !!campers.email && !!campers.emergency_cell_phone && !!campers.emergency_contact_first_name && !!campers.emergency_contact_last_name && !!campers.emergency_home_phone && !!campers.relationship_to_camper && !!campers.first_time_flag )">Submit</button> <p ng-show ="campers.status == 'Submitted'" > {{campers.registration_date | date: 'medium'}}

            </p>
            </td>
            <td>{{campers.status}}</td>
            <td>
              <button ng-click="fetchCampers(campers.zkp_camper_id)"  type="submit" name="view" class="btn btn-default" role="button" ng-show="campers.status == 'Submitted' "><span class="glyphicon glyphicon-eye-open"></span></button>
              <button ng-click="fetchCampers(campers.zkp_camper_id)" type="submit" name="edit" class="btn btn-default" role="button" ng-hide="campers.status == 'Submitted' " ><span class="glyphicon glyphicon-edit"></span></button>

  <button type="button" ng-click="setValue(campers.zkp_camper_id)" name="deleteModalLauncher" id="deleteModalLauncher" class="btn btn-danger" role="button" data-toggle="modal" data-target="#deleteModal" ng-hide="campers.status == 'Submitted' " ><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></button>

            </td>
          </tr>

我非常感谢您的帮助!谢谢!

1 个答案:

答案 0 :(得分:2)

有一个指令可以最大程度地减少检查绑定和所有绑定时角度循环的闪烁。它称为ng-cloak,可以添加到视图中的任何元素。

更多信息:https://www.w3schools.com/angular/ng_ng-cloak.asp

           ...
        

您还可以使用在内容完全加载时触发的angularjs事件,并设置标志ex。 loading = true,然后对加载的变量使用ng-show。

控制器:

$scope.$on('$viewContentLoaded', function(){
   $scope.loaded = true;
});

查看:

<table ng-show="loaded">
  .....
 </table>

希望有帮助!