angular1xx封装指令点击按钮显示加载loading动画

页面经常会有按钮点击操作,当用户点击的时候,由于网络或者其他原因导致不能很快响应,就得加一个加载动画显示此时的状态。

loading.gif
<!DOCTYPE html>
<html ng-app="myApp">

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link href="./node_modules/font-awesome/css/font-awesome.css" rel="stylesheet">
    <link href="./bootstrap.css" rel="stylesheet">
    <script src="./jquery-2.1.1.min.js"></script>
    <script src="./angular.js"></script>
</head>

<body ng-controller="myCtrl">
    <button class="btn btn-primary" btn-loading-title="导出中,请稍等" trigger-loading="beginLoading" ng-click="toggleLoad()"><i class="fa fa-heartbeat"></i> load</button>
    <button class="btn btn-default" ng-click="toggleLoad()">切换按钮状态</button>
</body>
<script>
/*
dependencies: 
font-awesome: "^4.7.0",
 AngularJS v1.5.0
 jQuery v2.1.1 

*/
angular.module('myDirectives', [])
    .directive('triggerLoading', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attr) {
                var d = '<i class="fa fa-spinner fa-pulse" style="padding:0"></i>';
                var oldI = $(element).find('i.fa');
                var text = attr.btnLoadingTitle || '操作中,请稍等';
                scope.$watch(function() {
                    return scope.$eval(attr.triggerLoading);
                }, function(value) {
                    if (angular.isDefined(value)) {
                        if (value) {
                            $(element).find('i.fa').remove();
                            $(element).attr('disabled', true);
                            $(element).attr('title', text);
                            $(element).prepend(d);
                        } else {
                            $(element).removeAttr('disabled');
                            $(element).removeAttr('title');
                            $(element).find('i.fa').remove();
                            $(element).prepend(oldI);
                        }
                    }
                });
            }
        }
    });
angular.module('myApp', ['myDirectives'])
    .controller('myCtrl', ['$scope', function($scope) {
        console.log()
        $scope.beginLoading = false;
        $scope.toggleLoad = function() {
            console.log($scope.beginLoading)
            $scope.beginLoading = !$scope.beginLoading;
        };
    }]);
</script>

</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 吃货地图产品需求文档 V1.0-2015/03/30 1概述 1.1产品概述及目标 概述:“吃货地图”是一款基于i...
    michaelshan阅读 5,899评论 1 46
  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 1,378评论 0 1
  • 不论白天夜晚,家乡的一切都那么美 不论男女老少,家乡的一切都充满爱 无言的爱,在家乡的寸土上点点体现
    Cammily阅读 289评论 0 1
  • 状态:独自带娃一个多月了,老公在家工作,需要他时帮忙。 前奏:这个月说要回老家给大爷迁坟,无法理解却也无法阻拦。因...
    凯玲满阅读 229评论 0 0
  • 李菲儿详细给校友解释了招聘员工需要做的职业规划和能力知识设定,以及招聘员工与企业文化融合与否的判断、考核技巧等,校...
    浅笑扬帆阅读 160评论 0 2