离子视图转换闪烁问题

时间:2016-06-10 14:35:13

标签: angularjs ionic-framework

我调用API并在$ionicView.beforeEnter中返回绑定响应。但是,在输入视图时,有时我会加载视图但数据在几秒钟之后才会被绑定,尤其是在网络连接不良时。怎么可以解决这个问题?

这会因为我的API调用是异步的吗?

angular.module('app').controller(function($scope, ApiMethod) {
    $scope.$on("$ionicView.beforeEnter", function(event, data){
       ApiMethod.GetFormInfo().$promise.then(function (res) {
            $scope.res = res;
       }, function (errRes) {

       })
    });
});

<ion-content>
    <form name="form">
        <div class="list">
          <label class="item item-input">
            <input type="text" placeholder="First Name" ng-model="res.firstName">
          </label>
          <label class="item item-input">
            <input type="text" placeholder="Last Name" ng-model="res.lastName">
          </label>
          <label class="item item-input">
            <textarea placeholder="Comments"  ng-model="res.comments"></textarea>
          </label>
        </div>

        <button type="submit">Submit</button>
    </form>
</ion-content>

1 个答案:

答案 0 :(得分:1)

是的,由于暂停异步ApiMethod调用,存在闪烁。为了在我的Ionic应用程序中优雅地处理它,我使用$ionicLoading。这将“冻结”用户移动,直到数据被加载。我认为最好通知他们加载然后让他们问一个空白视图。

实现:

angular.module('app').controller(function($scope, ApiMethod, $ionicLoading) {

    $scope.show = function() {
        $ionicLoading.show({
            template: 'Loading...'
        }).then(function(){
            console.log("The loading indicator is now displayed");
        });
    };
    $scope.hide = function(){
        $ionicLoading.hide().then(function(){
            console.log("The loading indicator is now hidden");
        });
    };

    $scope.$on("$ionicView.beforeEnter", function(event, data){
        // Show loading
        $scope.show();
        ApiMethod.GetFormInfo().$promise.then(function (res) {
            $scope.res = res;
            // Hide loading
            $scope.hide();
       }, function (errRes) {

       })
    });
});

参考:$ionicLoading