zoukankan      html  css  js  c++  java
  • angularJS 指令系统

    指令本质上就是AngularJS扩展具有自定义功能的HTML元素的途径。
    在HTML中要用内置指令ng-app标记出应用的根节点,这个指令需要以属性的形式来使用,因此可以将它写到任何位置,但是写到<html>的开始标签上是最常规的做法:
    所有内置指令的命名空间都使用ng作为前缀。为了防止命名空间冲突,不要在自定义指令前加ng前缀


    来创建一个自定义指令

    <my-directive></my-directive>
    angular.module('myApp',[])
            .directive('myDirective', function() {
                return {
                    restrict: 'E',
                    template: '<a href="http://google.com">Click me to go to Google</a>'
                };
    });

    运行时,界面中  Click me to go to Google 就代替了<my-directive></my-directive> 标签

    通过AngularJS模块中的.directive()方法,通过传入一个字符串和一个函数来注册一个新指令。其中字符串是这个指令的名字,指令名应该是驼峰命名风格的,函数返回一个对象

    directive()方法返回的对象中包含了用来定义和配置指令所需的方法和属性。

    内置指令:

    基础 ng 属性指令:

     ng-href;   ng-src;  

    // 当 href 包含一个 {{expression}}时总是使用 ng-href 
    <a ng-href="{{ myHref }}">I'm feeling lucky, when I load</a>
    <img ng-src="{{imgSrc}}"/>

    布尔属性:
     ng-disabled;   ng-checked;   ng-readonly;
    例子:

    //当输入框没有输入时,write是null,那么!write是true,此时按钮不能点击,输入后,!write就是false,可以点击
    <input type="text" ng-model="write" placeholder="请输入">
    <button  ng-disabled="!write">提交</button>

    check和 readonly 同理。


     ng-selected;

    //check和select 进行绑定
    <input type="checkbox"    ng-model="isTwoFish"><br/>
    <select>
        <option>One Fish</option>
        <option ng-selected="isTwoFish">Two Fish</option>
        <option >222o Fish</option>
    </select>

    ng-repeat
    ng-repeat用来遍历一个集合或为集合中的每个元素生成一个模板实例。集合中的每个元素都会被赋予自己的模板和作用域。同时每个模板实例的作用域中都会暴露一些特殊的属性。
     $index:遍历的进度(0...length-1)。
     $first:当元素是遍历的第一个时值为true。
     $middle:当元素处于第一个和最后元素之间时值为true。
     $last:当元素是遍历的最后一个时值为true。
     $even:当$index值是偶数时值为true。
     $odd:当$index值是奇数时值为true。
    下面的例子展示了如何用$odd和$even来制作一个红蓝相间的列表。 JavaScript中数组
    的索引从0开始,因此我们用!$even和!$odd来将$even和$odd的布尔值反转。
    <ul ng-controller="PeopleController">
      <li ng-repeat="person in people" ng-class="{even: !$even, odd: !$odd}">
        {{person.name}} lives in {{person.city}}
      </li>
    </ul>
    .odd { } .even { } angular.module('myApp',[])     .controller('PeopleController',function($scope) {         $scope.people = [           {name: "Ari", city: "San Francisco"},           {name: "Erik", city: "Seattle"}];     });

     ng-init    ng-init指令用来在指令被调用时设置内部作用域的初始状态。

    {{ }}
    <div>{{name}}</div>
    {{ }}语法是AngularJS内置的模板语法,它会在内部$scope和视图之间创建绑定。基于这个绑定,只要$scope发生变化,视图就会随之自动更新。
    事实上它也是指令,虽然看起来并不像,实际上它是ng-bind的简略形式,用这种形式不需要创建新的元素,因此它常被用在行内文本中。

      注意,在屏幕可视的区域内使用{{ }}会导致页面加载时未渲染的元素发生闪烁,用ng-bind可以避免这个问题。
    <body ng-init="greeting='HelloWorld'">
      {{ greeting }}
    </body>

    ng-bind

    <body ng-init="greeting='HelloWorld'">
        <p ng-bind="greeting"></p>
    </body>

     ng-cloak
    除使用ng-bind来避免未渲染元素闪烁,还可以在含有{{ }}的元素上使用ng-cloak指令:
    <body ng-init="greeting='HelloWorld'">
    <p ng-cloak>{{ greeting }}</p>
    </body>
    ng-cloak指令会将内部元素隐藏,直到路由调用对应的页面时才显示出来。

    ng-bind-template
    同ng-bind指令类似, ng-bind-template用来在视图中绑定多个表达式。
    <div
      ng-bind-template="{{message}}{{name}}">
    </div>

    ng-model
    ng-model指令用来将input、 select、 text area或自定义表单控件同包含它们的作用域中的属性进行绑定。它可以提供并处理表单验证功能,在元素上设置相关的CSS类(ng-valid、ng-invalid等),并负责在父表单中注册控件。

    它将当前作用域中运算表达式的值同 给定的元素进行绑定。如果属性并不存在,它会隐式创建并将其添加到当前作用域中。

    我们应该始终用ngModel来绑定$scope上一个数据模型内的属性,而不是$scope上的属性,这可以避免在作用域或后代作用域中发生属性覆盖。  例如:

    <input type="text"  ng-model="modelName.someProperty" />      $scope.modelName = { someProperty:...}

     ng-show/ng-hide
    ng-show和ng-hide根据所给表达式的值来显示或隐藏HTML元素。当赋值给ng-show指令的值为false时元素会被隐藏。类似地,当赋值给ng-hide指令的值为true时元素也会被隐藏。

    <div ng-show="2 + 2 == 5">
        2 + 2 isn't 5, don't show
    </div>
    <div ng-show="2 + 2 == 4">
        2 + 2 is 4, do show
    </div>
    <div ng-hide="2 + 2 == 5">
        2 + 2 isn't 5, don't hide
    </div>
    <div ng-hide="2 + 2 == 4">
        2 + 2 is 4, do hide
    </div>

    ng-if
    使用ng-if指令可以完全根据表达式的值在DOM中生成或移除一个元素。如果赋值给ng-if的表达式的值是false,那对应的元素将会从DOM中移除,否则对应元素的一个克隆将被重新插入DOM中
    ng-if同no-show和ng-hide指令最本质的区别是,它不是通过CSS显示或隐藏DOM节点,而是真正生成或移除节点。

    15. ng-change
    这个指令会在表单输入发生变化时计算给定表达式的值。因为要处理表单输入,这个指令要和ngModel联合起来使用

    <div ng-controller="EquationController">
                    <input type="text" ng-model="equation.x" ng-change="change()" />
                    <code>{{ equation.output }}</code>
                </div>
    
    var app = angular.module("app",[]);
    app.controller('EquationController',function($scope) {
            $scope.equation = {};
            $scope.change = function() {
                $scope.equation.output= parseInt($scope.equation.x) + 2;
            };
    });

    只要文本输入字段中的内容发生了变化就会改变equation.x的值,进而运行change()函数。

    16. ng-form
    ng-form用来在一个表单内部嵌套另一个表单。普通的HTML <form>标签不允许嵌套,但
    ng-form可以。
    这意味着内部所有的子表单都合法时,外部的表单才会合法。

     表单合法时设置ng-valid;
     表单不合法时设置ng-invlid;
     表单未进行修改时设置ng-pristion;
     表单进行过修改时设置ng-dirty。
    Angular不会将表单提交到服务器,除非它指定了action属性。要指定提交表单时调用哪个
    JavaScript方法,使用下面两个指令中的一个。
     ng-submit:在表单元素上使用。
     ng-click:在第一个按钮或submit类型(input[type=submit])的输入字段上使用。

    18. ng-select
    ng-select用来将数据同HTML的<select>元素进行绑定。这个指令可以和ng-model以及
    ng-options指令一同使用,构建精细且表现优良的动态表单。

    ng-options的值可以是下面两种形式。

     数组作为数据源:
     用数组中的值做标签;
     用数组中的值作为选中的标签;
     用数组中的值做标签组;
     用数组中的值作为选中的标签组。
     对象作为数据源:
     用对象的键值(key-value)做标签;
     用对象的键值作为选中的标签;
     用对象的键值作为标签组;
     用对象的键值作为选中的标签组。
    下面看一个ng-select指令的实例

    <div ng-controller="citySelection">
                    <select ng-model="city" ng-options="city.name for city in cities">
                        <option value="">请选择</option>
                    </select>
                Best City: {{ city.name }}
                    
                </div>
    
    app.controller('citySelection',function($scope) {
            $scope.cities = [
                {name:"北京"},
                {name:"上海"},
                {name:"广州"},
                {name:"深圳"}
            ]
                        
    });

     ng-submit
    ng-submit用来将表达式同onsubmit事件进行绑定。这个指令同时会阻止默认行为(发送请求并重新加载页面), 除非表单不含有action属性。

    <form ng-submit="submit()" ng-controller="FormController">
                    Enter text and hit enter:
                    <input type="text" ng-model="person.name" name="person.name" />
                    <input type="submit" name="person.name" value="Submit" />
                    <code>people={{people}}</code>
                    <ul ng-repeat="(index, object) in people">
                        <li>{{ object.name }}</li>
                    </ul>
                </form>
    
    app.controller('FormController',function($scope) {
            $scope.person = {name:null};        
            $scope.people = [];
            $scope.submit = function(){
                if($scope.person.name){
                    $scope.people.push({name:$scope.person.name});
                    $scope.person.name = '';
                }
            }                
    });

     ng-class
    使用ng-class 动态设置元素的类,方法是绑定一个代表所有需要添加的类的表达式。重复的类不会添加。当表达式发生变化,先前添加的类会被移除,新类会被添加

    下面的例子会用ng-class在一个随机数大于5时将.red类添加到一个div上:

    <div ng-controller="LotteryController">
                    <div ng-class="{red: x > 5}" ng-if="x > 5">
                        You won!
                    </div>
                    <button ng-click="x = generateNumber()" ng-init="x = 0">Draw Number</button>
                    <p>Number is: {{ x }}</p>
                </div>
    //如果x的值大于5,那么 div回事用red的样式, 如果x的值小于5 , 那么就是默认的样式
    app.controller('LotteryController',function($scope) { $scope.generateNumber = function(){ return Math.random()*10+1; } });
  • 相关阅读:
    Mysql5.7 Linux安装教程
    搭建appium的android环境
    SonarQube的安装、配置与使用(windows)
    动态规划(一)——0-1背包问题
    回溯法(四)——图的m着色问题
    回溯法(三)——正则表达式匹配问题
    C++中各种基本数据类型大小一览
    回溯法(二)——0-1背包问题
    回溯法(一)——八皇后问题
    分治算法——正规归并排序中顺便计算出数组中的逆序对数
  • 原文地址:https://www.cnblogs.com/a-lonely-wolf/p/5750916.html
Copyright © 2011-2022 走看看