zoukankan      html  css  js  c++  java
  • angular笔记

    /**
     * Created by Administrator on 2016/5/3 0003.
     */
    
    ng-app是告诉angularjs编译器把该元素当作编译的根
    
    //定义模块
    var myApp=angular.module('index', [])
    
    
    //定义控制器
    myApp.controller('haha', function ($scope) {
        $scope.message = 'World';
    })
    
    
    /*AngularJS 表达式
    AngularJS 表达式写在双大括号内:{{ expression }}。
    AngularJS 表达式把数据绑定到 HTML,这与 ng-bind 指令有异曲同工之妙。
    AngularJS 将在表达式书写的位置"输出"数据。
    AngularJS 表达式 很像 JavaScript 表达式:它们可以包含文字、运算符和变量*/
    <div ng-app="myApp">
    <div  ng-controller="haha" >
    <input type="text" ng-model="message" />
    Hello, {{ message }}
    </div>
    </div>
    
    
    //AngularJS 对象
    <div ng-init="obj={'name':'leyi'}">
    {{obj.name}}
    </div>
    
    
    //AngularJS 数组
    <div ng-init="arr=[1,2,3,4,5]">
        第二个值为{{arr[1]}}
    </div>
    
    <!--AngularJS 表达式 与 JavaScript 表达式
    类似于 JavaScript 表达式,AngularJS 表达式可以包含字母,操作符,变量。
    与 JavaScript 表达式不同,AngularJS 表达式可以写在 HTML 中。
    与 JavaScript 表达式不同,AngularJS 表达式不支持条件判断,循环及异常。
    与 JavaScript 表达式不同,AngularJS 表达式支持过滤器。-->
    
    <!--AngularJS 指令
    AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-。
    ng-app 指令初始化一个 AngularJS 应用程序。
    ng-init 指令初始化应用程序数据。
    ng-model 指令把元素值(比如输入域的值)绑定到应用程序。-->
    <div ng-app="" ng-init="firstName='John'">
        <p>在输入框中尝试输入:</p>
        <p>姓名:<input type="text" ng-model="firstName"></p>
        <p>你输入的为: {{ firstName }}</p>
    </div>
    
    
    //ng-repeat 指令会重复一个 HTML 元素:
    <ul ng-init="arr=[1,2,3,4,5]">
        <li ng-repeat="x in arr">{{x}}</li>
    </ul>
    
    
    <!--
    创建自定义的指令
    除了 AngularJS 内置的指令外,我们还可以创建自定义指令。
    你可以使用 .directive 函数来添加自定义的指令。
    要调用自定义指令,HTMl 元素上需要添加自定义指令名。
    使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:-->
    .directive('leYi',function(){
    return {
    template:"<p>自定义指令</p>"
    }
    })
    //调用
    通过元素名:<le-yi></le-yi>
    通过属性:<div le-yi></div>
    通过类名:<div class="le-yi"></div>
    通过注释:<!-- 指令: le-yi -->
    //限制使用
    restrict 值可以是以下几种:
    E 只限元素名使用
    A 只限属性使用
    C 只限类名使用
    M 只限注释使用
    restrict 默认值为 EA, 即可以通过元素名和属性名来调用指令。
    .directive('leYi',function(){
    return {
    restrict:"E",//只限元素名使用
    template:"<p>自定义指令</p>"
    }
    })
    
    数据绑定是将模型中的人数据与web页面中显示的内容链接在一起的过程。
    //双向绑定 当页面中的数据改变时,模型会更新,当模型中的数据改变时,web页面也将自动更新
    .controller('bindFn',function($scope){
    $scope.value='bind value'
    })
    
    <div ng-controller="bindFn">
        <input type="text" ng-model="value"/>
        {{value}}
    </div>
    
    
    //ng-model 指令
    //验证用户输入
    <form ng-controller="bindFn" name="haha">
        <input type="email" ng-model="text" name="email"/>
        <span ng-show="haha.email.$error.email">你输入的的邮箱格式不正确</span>
    </form>
    //应用状态
    ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error):
    <form ng-controller="bindFn" name="haha">
        <input type="email" ng-model="text" name="email" required/>
        <p> valid:{{haha.email.$valid}}输入的值是否合法</p>
        <p> dirty:{{haha.email.$dirty}}值是否改变</p>
        <p> touched:{{haha.email.$touched}}是否有点击</p>
    </form>
    //CSS 类
    ng-model 指令基于它们的状态为 HTML 元素提供了 CSS 类:
    ng-empty
    ng-not-empty
    ng-touched
    ng-untouched
    ng-valid
    ng-invalid
    ng-dirty
    ng-pending
    ng-pristine
    <style>
        input.ng-empty{border:1px solid red}
    </style>
    <form ng-controller="bindFn" name="haha">
        <input type="email" ng-model="text" name="email" required/>
    </form>
    
    
    <!--
    Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。
    Scope 是一个对象,有可用的方法和属性。
    Scope 可应用在视图和控制器上。-->
    所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。
    $rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用。
    
    
    AngularJS 过滤器可用于转换数据:
    {{100000|currency}}//$100,000.00
    {{"abc"|uppercase}}//ABC
    {{"ABC"|uppercase}}
    输入过滤器可以通过一个管道字符(|)和一个过滤器添加到指令中,该过滤器后跟一个冒号和一个模型名称。
    filter 过滤器从数组中选择一个子集:
    <div ng-init="arr=[{name:'Jani',country:'Norway'},{name:'Hege',country:'Sweden'},{name:'Kai',country:'Denmark'}]">
        <input type="text" ng-model="test" />
        <p ng-repeat="x in arr|filter:test|orderBy:'country'">
            {{x.name+"-----"+x.country}}
        </p>
    </div>
    
    
    在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。
    AngularJS 内建了30 多个服务。
    // $location 服务
    .controller('bindFn',function($scope,$location){
    $scope.myURL=$location.absUrl()
    })
    //$http服务
    .controller('bindFn',function($scope,$location,$http){
    $scope.myURL=$location.absUrl()
    $http.get('xxx').success(function(response){
    $scope.res=response
    })
    })
    //$timeout 服务 //$interval 服务分别对应window.setTimeout window.setInterval
    //创建自定义服务
    .service('$leyi',function(){
    this.fn=function(x){
    return x+100
    }
    })
    .controller('bindFn',function($scope,$location,$http,$leyi){
    $scope.myURL=$location.absUrl()
    $http.get('xxx').success(function(response){
    $scope.res=response
    })
    $scope.kk=$leyi.fn(1)
    })
    //自定义过滤器
    1.先创建一个模块
    var myAppModule = angular.module("myApp",[]);
    2.在模块的基础上,创建过滤器
    myAppModule.filter("filterName",function(){//filterName 过滤器的名字
    return function(ag1){
    return ag1+1000
    }
    });
    {{50|filterName}}
    
    
    AngularJS Select(选择框)
    1.可以使用 ng-option 指令来创建一个下拉列表,列表项通过对象和数组循环输出
    <select ng-model="selectedName" ng-options="x for x in names"></select>
    2.也可以使用ng-repeat 指令来创建下拉列表:
    <select ng-model="selectedName">
        <option ng-repeat="x in names">{{x}}</option>
    </select>
    3.两者之间的区别 ng-repeat 选择的值selectedName是一个字符串,ng-options选择的值selectedName是一个对象,当选择值是一个对象时,我们就可以获取更多信息,应用也更灵活。
    $scope.names=[{"name":"a","color":"red"},{"name":"b","color":"blue"},{"name":"c","color":"green"}]
    <select ng-model="selectedName" ng-options="x.name for x in names"></select>
    selectedName.name:{{selectedName.name}}
    selectedName.color:{{selectedName.color}}
    <select ng-model="selectedName">
        <option ng-repeat="x in names" value="{{x.name}}">{{x.color}}</option>
    </select>
    {{selectedName}} //a||b||c
    //使用对象作为数据源, x 为键(key), y 为值(value):
    <select ng-model="selectedName" ng-options="y.name for (x, y) in names">
    </select>
    $scope.names={
    "x":{"name":"a","color":"red"},
    "y":{"name":"b","color":"blue"},
    "z":{"name":"c","color":"green"}
    }
    {{selectedName.name}}
    {{selectedName.color}}
    
    
    AngularJS 表格
    $index: 索引  $odd  $even 索引为奇数偶数...
    
    
    AngularJS HTML DOM
    ng-disabled  ng-show 指令隐藏或显示一个 HTML 元素。 ng-hide 指令用于隐藏或显示 HTML 元素。
    <button  ng-disabled="mySelect">禁用切换</button>
    <input type="checkbox"   ng-model="mySelect"/>
    ng-click 指令定义了 AngularJS 点击事件。
    
    <button ng-click="count=count+1">递增</button>
    {{count}}
    
    <button ng-click="toggle()">显示隐藏切换</button>
    <p ng-show="myvar">!@#$%^&*()</p>
    $scope.myvar=true
    $scope.toggle=function(){
    $scope.myvar=!$scope.myvar
    }
    
    表单验证
    1.必填项验证
    某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:
    <input type="text" required ng-model="aa"/>
    {{aa}}
    2. 最小长度
    验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}":
    <input type="text" ng-minlength="10" ng-model="bb" />
    {{bb}}
    3. 最大长度
    <input type="text" ng-maxlength="15" />
    4. 模式匹配 匹配正则表达式
    <input type="text" ng-pattern="/d/" ng-model="cc" />
    {{cc}}
    5. 电子邮件 验证输入内容是否是电子邮件
    <input type="email"  ng-model="dd" />
    {{dd}}
    6. 数字 验证输入内容是否是数字
    <input type="number"  ng-model="ee" />
    {{ee}}
    7. URL 验证输入内容是否是URL
    <input type="url"  ng-model="ff" />
    {{ff}}
    <!--以上是将HTML5的新属性和angular相结合进行验证,只有验证通过,才会进行绑定-->
    屏蔽浏览器对表单的默认验证行为,可以在表单元素上添加novalidate标记
    访问DOM中的表单属性 formName.inputFieldName.property
    $pristine 是否未被修改
    $dirty 是否被修改
    $valid 是否通过验证
    $invalid 是否未通过验证
    <!--$error对象。它包含当前表单的所有验证内容,以及它们是否合法的信息。-->
    formName.inputfieldName.$error 如果验证失败,这个属性的值为true;如果值为false,说明输入字段的值通过了验证。
    实例
    <form name="formName">
        // 以下代码还有点问题,当内容全删掉后还是会显示通过验证
        <!--必填项-->
        <input placeholder="必填项" type="text" required ng-model="aa" name="require_name"/>
        <span ng-show="formName.require_name.$dirty&&formName.require_name.$valid">通过验证</span>
        <!--最小长度-->
        <input placeholder="最小长度为5" type="text"  ng-model="bb" name="minlength_name" ng-minlength="5" />
        <span ng-show="formName.minlength_name.$dirty&&formName.minlength_name.$valid">通过验证</span>
        <!--最大长度-->
        <input placeholder="最大长度为8" type="text"  ng-model="cc" name="maxlength_name" ng-maxlength="8" />
        <span ng-show="formName.maxlength_name.$dirty&&formName.maxlength_name.$valid">通过验证</span>
        <!--邮箱-->
        <input placeholder="输入邮箱格式" type="email"  ng-model="dd" name="email_name" />
        <span ng-show="formName.email_name.$dirty&&formName.email_name.$valid">通过验证</span>
        <!--数字-->
        <input placeholder="输入数字格式" type="number"  ng-model="ee" name="num_name"  />
        <span ng-show="formName.num_name.$dirty&&formName.num_name.$valid">通过验证</span>
        <!--url-->
        <input placeholder="输入URL格式" type="url"  ng-model="ff" name="url_name"  />
        <span ng-show="formName.url_name.$dirty&&formName.url_name.$valid">通过验证</span>
        <!--正则匹配-->
        <input placeholder="输入小写字母" type="text"  ng-model="hh" ng-pattern="/^[a-z]*$/" name="regexp_name"  />
        <span ng-show="formName.regexp_name.$dirty && formName.regexp_name.$valid">通过验证</span>
        <input type="submit" ng-disabled="formName.$invalid" value="提交"/>
    </form>
    
    全局方法函数API
    
    angular.bind  angular.bind(self,fn,args );
    上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用。
    var aa={"name":"leyi"}
    function fn(age){
    alert(this.name+"---"+age)
    }
    angular.bind(aa,fn)(12)
    
    
    angular.copy  angular.copy(source, [destination]);
    复制一个对象或者一个数组。
    如果省略了destination,一个新的对象或数组将会被创建出来;
    如果提供了destination,则source对象中的所有元素和属性都会被复制到destination中;
    如果source不是对象或数组(例如是null或undefined), 则返回source;
    如果source和destination类型不一致,则会抛出异常。
    注意:这个是单纯复制覆盖,不是类似继承
    function Haha(){
    this.name=123
    }
    Haha.prototype.age=222
    var newObj=angular.copy(new Haha())
    console.info(newObj) //创建一个新对象,包含继承属性
    var newObj2={'height':333}
    angular.copy(new Haha(),newObj2)
    console.info(newObj2)//不包含继承属性,会覆盖新对象的属性
    
    
    angular.element
    如果jQuery被引入了,则angular.element就可以看作是jQuery选择器,选择的对象可以使用jQuery的函数;如果jQuery不可用,angular.element只能接受HTML字符串或者
    DOM元素为参数,选择的元素只可以调用Angular中嵌入的精简版的jQuery library(名为: "jQuery lite" or "jqLite").
    注意: 所有被Angular引用的元素都是jQuery或者jqLite对象,不是原始的DOM元素了。
    jqLite支持的jQuery函数有:
    <p id="haha">12</p>
    var haha=document.getElementById('haha')
    console.info(angular.element(haha).html())
    
    
    angular.equals 比较两个值或者两个对象是不是相等。
    
    angular.forEach ===>_.each()
    循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值
    
    
    angular.fromJson  把Json字符串转为对象  angular.toJson() 相反
    console.info(angular.isObject(angular.fromJson('{"name":"leyi"}')))
    
    angular.extend  angular.extend(dst, src);
    复制src对象中的属性去dst对象中. 支持多个src对象. 如果你不想改变一个对象,你可以把dst设为空对象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持递归复制.
    var obj={"name":"leyi"}
    var obj2={}
    angular.extend(obj2,obj)
    console.info(obj2) //{"name":"leyi"}
    
    
    angular路由
    angular.module('myRouter',['ngRoute'])
    .config(function($routeProvider){
    $routeProvider
    .when('/',{"template":"这是首页!"})
    .when("/leyi",{"templateUrl":"leyi.html"})
    .when('/404',{"template":"404!"})
    .otherwise({
    redirectTo:"/404"
    })
    })
    
    
    动画
    angular.module('leyi', ['ngAnimate'])
    <style>
        .content{transition:all linear 0.5s; height:200px; background:lightblue}
        .ng-hide{height:0}
    </style>
    <input type="checkbox" name="" ng-model="bl"/>
    <div ng-class="bl" class="content">内容!</div>
    
    
    
    依赖注入
    AngularJS 提供很好的依赖注入机制。以下5个核心组件用来作为依赖注入:
    value
    factory
    service
    provider
    constant
    
    
    Value 是一个简单的 javascript 对象,用于向控制器传递值(配置阶段):
    var leyiModule=angular.module('leyi.controllers', ['ngAnimate'])
    leyiModule.value("defaultValue",1000000)
    leyiModule.controller('leyi',function($scope,defaultValue){ //注入值
    $scope.haha=defaultValue
    })
    
    AngularJS中service,factory,provider的区别
    在Angular里面,services作为单例对象在需要到的时候被创建,只有在应用生命周期结束的时候(关闭浏览器)才会被清除。而controllers在不需要的时候就会被销毁了。
    这就是为什么使用controllers在应用里面传递数据不可靠的原因
    
    factory()  Angular里面创建service最简单的方式是使用factory()方法。返回一个工厂模式创建的服务对象
    (需要使用.config()来配置service的时候不能使用factory()方法)
    var leyiModule=angular.module('leyi.controllers', ['ngAnimate'])
    leyiModule.factory("leyiFactory",function(){
    var aa={}
    aa.num=11111
    return aa
    })
    
    
    service() 通过构造函数的方式让我们创建服务对象
    (需要使用.config()来配置service的时候不能使用service()方法)
    leyiModule.service('leyiService',function(){
    this.num=22222
    })
    
    
    provider() 是创建service最底层的方式,这也是唯一一个可以使用.config()方法配置创建service的方法
    Provider recipe 是语法定义为一个自定义类型,实现 $get 的方法。这个方法是一个工厂方法,就像我们在 Factory recipe 中使用的一样。事实上,如果你定义一个 Factory recipe,钩子会自动创建一个包含空 Provider 类型 $get 方法的工厂方法。
    leyiModule.provider('leyiProvider',function(){
    this.$get=function(){
    var aa={}
    aa.num=3333
    return aa
    }
    })
    调用
    leyiModule.controller('leyi',function($scope,leyiFac,leyiService,leyiProvider){
    $scope.nihao=leyiFac.num
    $scope.hello=leyiService.num
    $scope.world=leyiProvider.num
    })
    

      

  • 相关阅读:
    我的物联网项目(七)前期线上事故
    我的物联网项目(六)推广策略
    我的物联网项目(五)下单渠道
    我的物联网项目(四)订单系统
    我的物联网项目(三)平台架构
    我的物联网项目(二)初建团队
    我的物联网项目(一)开端
    從需求分析開始
    提升GDI画图的效率
    C#写COM组件,JS调用控件
  • 原文地址:https://www.cnblogs.com/leyi/p/5455747.html
Copyright © 2011-2022 走看看