代码之家  ›  专栏  ›  技术社区  ›  Kabukki

在回调中更改条件后,ngClass不更新

  •  1
  • Kabukki  · 技术社区  · 7 年前

    加载 我这样使用:

    <div class='ui segment' ng-class="{'loading': loading == true}">
    

    为了触发调用,我使用另一个元素 ng点击

    <i class='...' ng-click="action('deleteGlobal', false)"></i>
    

    变量的 $范围

    $scope.action = (action, redirect) => {
        delete $scope.error;
        $scope.loading = true;
        $timeout(() => {
            $scope.project[action]((err) => {
                $scope.loading = false;
                if (err)
                    $scope.error = err;
                else if (redirect)
                    $state.go('projects.all');
            });
        })
    }
    

    项目 项目经理 删除全局

    deleteGlobal (callback) {
        window.setTimeout(() => {
            callback();
        }, 1000)
    }
    

    (这里,setTimeout仅用于模拟长操作,因为我计划稍后用它来替换此代码)

    $范围。加载 调用回调后变为false。还有几个 安慰日志

    提前感谢!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Community holdenweb    4 年前

    将基于回调的API与AngularJS集成

    通常,在AngularJS中,基于第三方回调的API通过将其转换为$q承诺与框架集成:

    function apiPromise(callbackBasedApi) {
        var defer = $q.defer()
        callbackBasedApi( (value,err) => {
             ̶c̶a̶l̶l̶b̶a̶c̶k̶(̶)̶;̶  
             if (value) {
                defer.resolve(value);
             } else {
                defer.reject(err)
             }; 
        })
        return defer.promise;
    }
    

    .then 返还承诺的方式:

    $scope.action = (action, redirect) => {
        delete $scope.error;
        $scope.loading = true;
        var promise = apiPromise($scope.project[action])
          .then(function(value) {
            if (redirect)
               $state.go('projects.all');
            };
        })
          .catch(function(err) {
            $scope.error = err;
        })
          .finally(function() {
            $scope.loading = false;
        });
    }
    

    承诺由 $q service 与AngularJS框架及其摘要周期集成。在AngularJS执行上下文中应用的操作将自动受益于AngularJS数据绑定、异常处理、属性监视等。