夏天夏 夏天夏
首页
  • 技术分享

    • 小白都能看懂的闭包
    • 关于后台管理应用
    • 关于技术的取舍
    • 前端工程化
    • 切换node版本
    • 如何优雅的写事件代理
    • 我所不了解的技术
    • 我喜欢的parcel
    • angular1使用
    • npm script打造前端工作流
  • 发布一个node插件

    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • 年终总结

    • 2019年总结
    • 2020年总结
    • 2021年总结
  • JavaScript
  • CSS
  • 框架
  • Node
  • 服务
  • web3
  • 其他
我的作品
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夏天夏

我也不饶岁月
首页
  • 技术分享

    • 小白都能看懂的闭包
    • 关于后台管理应用
    • 关于技术的取舍
    • 前端工程化
    • 切换node版本
    • 如何优雅的写事件代理
    • 我所不了解的技术
    • 我喜欢的parcel
    • angular1使用
    • npm script打造前端工作流
  • 发布一个node插件

    • 发布一个npm包
    • 如何打包一个插件工具库
    • 打包工具的选择
  • 年终总结

    • 2019年总结
    • 2020年总结
    • 2021年总结
  • JavaScript
  • CSS
  • 框架
  • Node
  • 服务
  • web3
  • 其他
我的作品
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript

  • CSS

  • 框架

    • vue
    • Angular6
    • Angularjs
      • ng题目
    • Node

    • 服务

    • 其他

    • 设计模式

    • web3

    • react

    • 学习笔记
    • 框架
    夏天夏
    2022-05-15
    目录

    Angularjs

    # 概念

    • module 相当于容器
    • directive 指令负责对html元素进行绑定,同时进行相互作用
    • service 公有代码逻辑
    • controller 私有代码逻辑
    • filter 过滤器

    # 指令directive (opens new window)

    • ng-app 标记angularjs的作用域
    • ng-model 绑定输入框的值到 scope 变量中:
    • ng-show 表达式为 true 时显示
    • ng-hide 表达式为 true 时隐藏
    • ng-disabled='switch' switch===false时候元素不可用,可以和type="checkbox" ng-model='switch'一起使用
    • ng-bind 使用给定的变量或表达式的值来替换 HTML 元素的内容。 与{{}}类似,解决了网速慢显示了的问题,一般用于首页代替{{}}
    • ng-bind-html 绑定 HTML 元素的 innerHTML 到应用程序数据,并移除 HTML 字符串中危险字符
    • ng-switch 指令根据单选按钮的选择结果显示或隐藏 HTML 区域。
      • ng-switch-when
    • ng-clack 等数据加载完成再显示数据模板,避免数据加载未完成出现现象

    # controller

    • $script 一个对象
    • 特性
      • 作用域,父子作用域对象按引用传递,变量(属性)按值传递。
        • $scope.data={}; $scope.data.x=hello //引用传递
        • $scope.data=123; //按值传递
      • $scopr.x其中找不到会向上父级controller找

    # 自定义指令

    • restrict 限制使用,默认值是:AE
      • E 作为元素名使用
      • A 作为属性使用
      • C 作为类名使用
      • M 作为注释使用
      • 坑:指令名字含有大写,使用的标签就必须加-符号,如指令名字“headerDemo” 标签名字就要header-demo
    • 指令scope:{}绑定策略
      • @ 把当前属性作为字符串传递。你还可以绑定来自外层scope的值。在属性值中插入{{}}即可
        • scope:{属性名字:"@"} === $scope.属性名字 ===
        • 与link()中的scope.test=iAttrs.test一样效果
      • = 与父scope中的属性进行双向绑定
      • & 传递一个来自父scope的函数,稍后调用
    • link(scope,element,attrs,ctrl) 四个参数分别是
      • scope 与指令中的controller中的$scope相连

        • scope.test()可以执行controller中的test()函数,也可以这样写scope.apply('test()')
      • element 标签对象可以调用jq常用语法如bind(),addClass(),removeClass()对元素操作

      • attrs 包含了指令所在元素的属性的标准化的参数对象 如指令abc中有属性TEST

        • <abc TEST></abc> 就是attrs.test
        • <abc TEST='btn()'></abc> 可以通过使用$apply()来执行属性中的函数$apply(attrs.test.btn)
      • ctrl:指令中可以使用controller来做数据交互 如:

    link: function($scope, iElm, iAttrs, controller) {
        controller('myCtrl', ['$scope', function($scope){
    
        }])
    }
    
    1
    2
    3
    4
    5

    # compile-link (opens new window)

    指令的不同controller中的不同函数之间的复用
    <!-- html -->
    <div ng-controller="myCtrl">
    	<abc-test howtoLoad='btn()'>btn</abc-test>
    </div>
    <div ng-controller="myCtrl2">
    	<abc-test howtoLoad='btn2()'>btn</abc-test>
    </div>
    
    <!-- js -->
    		angular.module('app',[])
    		.controller('myCtrl', ['$scope', function($scope){
    			$scope.btn=function(){
    				console.log("第一个指令 btn()")
    			}
    		}])
    		.controller('myCtrl2', ['$scope', function($scope){
    			$scope.btn2=function(){
    				console.log("第二个指令 btn2()")
    			}
    		}])
    
    		.directive('abcTest', [function(){
    			return {
    				restrict: 'AE', // E = Element, A = Attribute, C = Class, M = Comment
    				template: '<button> <div ng-transclude></div> </button>',
    				replace: true,
    				transclude: true,
    				link: function(scope, iElm, iAttrs, controller) {
    					iElm.on('click',function(){
    						// $scope.btn()
    						// $scope.$apply('btn()')
    						scope.$apply(iAttrs.howtoload) //注意坑:这里指令属性是用驼峰法则写的HeadBar在这里都要写成小学
    					})
    				}
    			};
    		}]);
    	
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    var app = angular.module("myApp", []);
    app.directive("runoobDirective", function() {
        return {
            template : "<h1>自定义指令!</h1>"
        };
    });
    注意 :使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:
    
    1
    2
    3
    4
    5
    6
    7

    # 第三方指令库 angular-ui (opens new window)

    • # 服务Service

      • $location
      • $http 向服务器发送请求
      • $timeout 对应了 JS window.setTimeout 函数。
        • 取消定时器 $timeout.cancel(t)
      • $interval 服务对应了 JS window.setInterval 函数。
        • 取消定时器 $interval.cancel(t)

    # 自定义服务

    app.service('hexafy', function() {
       this.myFunc = function (x) {
           return x.toString(16);
       }
    });
    
    1
    2
    3
    4
    5

    # 过滤器 filter |

    • currency 格式化字符串为大写。
    • lowercase 格式化字符串为小写。
    • currency 过滤器将数字格式化为货币格式:
    • orderBy 排序
      • orderBy:'id':true 根id降序排
      • orderBy:'id' 根据id升序排
    • filter 过滤输入,也可以自定义过滤
    • date 格式化成时间,可以自定义一下格式
      • date:"yyyy-MM-dd HH:mm:ss"
    • number:2 保留两位小数
    • limitTo :6 从前面开始截取6位

    # 自定义过滤器 filter |

    app.filter("myFilter",function(){
    			return function(input){
    				return input+"#"
    			}
    		})
    
    1
    2
    3
    4
    5

    # 依赖注入(只执行一起,实现多数据共享)

    # factory——简单

    app.factory(xx, function (){
    	return {a:"xxx"};
    });
    
    1
    2
    3

    # provider——强大:可配置的

    app.provider(xx, function (){
    	this.$get=function (){
    		return {a:"xxx"};
    	};
    });
    
    1
    2
    3
    4
    5

    # service——类似于构造函数

    app.service(xx, function (){
    	this....
    });
    
    1
    2
    3

    # 修改依赖 *会修改原始的依赖,原来的依赖就变了 (用不了可能废弃了)

    app.decorator('依赖的名字', function ($delegate){
    	$delegate	依赖项的东西
    	return 修改后的依赖;
    });
    
    1
    2
    3
    4

    # 变量||常量

    • constant——常量(不可装饰,不能改)

    • value——变量(可以改)

    ###消息机制(事件):

    • $scope.$emit('名字', 数据); 触发:自己+父级,向上发送
    • $scope.$broadcast('名字', 数据); 触发:自己+子级,向下放松
    • $scope.$on('名字', 数据); 接收

    # $HTTP 通用方法实例

    var app = angular.module('myApp', []);
        
    app.controller('siteCtrl', function($scope, $http) {
        $http({
            method: 'GET',
            url: 'https://www.runoob.com/try/angularjs/data/sites.php'
        }).then(function successCallback(response) {
                $scope.names = response.data.sites;
            }, function errorCallback(response) {
                // 请求失败执行代码
        });
      
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # 其他函数

    • $scope.$apply() 强制刷新(一般不用)
      • 当AngularJS外部的控制器(DOM事件、外部的回调函数如jQuery UI空间等)调用了AngularJS函数之后,必须调用$apply。在这种情况下,你需要命令AngularJS刷新自已(模型、视图等),$apply就是用来做这件事情的。
    • $scope.$watch() 监控
    • $scope.$watch(谁,做什么,是否监控他的内容和属性变化)

    # 路由 ui-router (opens new window)

    # 路由 ui-router2 官方中文文档 (opens new window)

    # 懒加载 $ocLazyLoad (opens new window)

    # 懒加载 $ocLazyLoad 官方文档 (opens new window)

    使用方法+参考资料 (opens new window)

        //定义模板,并注入ui-router
        var app = angular.module('myApp', ['ui.router']);   
        //对服务进行参数初始化,这里配stateProvider服务的视图控制
        app.config(["$stateProvider","$urlRouterProvider",  function ($stateProvider,$urlRouterProvider) {      
            $stateProvider     
            .state("home", {
                url: '/',   //注意url这里一定要以/开头不然不显示
                template:'<div>模板内容......</div>'
            })     
            $urlRouterProvider.otherwise('main'); //默认路径为main
        }]);  
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    ui-sref和ui-view指令都是ui-router自带的,有三种方法来激活状态:
    1.调用$state.go()方法,这是一个高级的便利方法。
    2.点击包含ui-sref指令的链接。
    3.导航到与状态相关联的 url。

    # 模板

    template: '<h1>My Contacts</h1>'
    templateUrl: 'contacts.html'
    templateUrl: function (stateParams){
        return '/partials/contacts.' + stateParams.filterBy + '.html';
    } //templateUrl的值可以通过函数放回
    
    1
    2
    3
    4
    5

    # ui-grid (opens new window)

    # 注意

    • 带ng开头的指令“”里面都可以写表达式,如ng-show="0>1"
    • 不带ng开头的指令也可以用{{}}里面写表达式,如class=""
    编辑 (opens new window)
    #angular
    上次更新: 2022/05/30, 17:33:41
    Angular6
    ng题目

    ← Angular6 ng题目→

    最近更新
    01
    远程办公的个人思考
    02-21
    02
    SEO
    01-02
    03
    NFT的价值
    12-27
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 夏天夏 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式