Angularjs的指令学习笔记

1.指令

ng-app  ng-controller

<script src="../js/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
    {{ firstName + " " + lastName }}
</div>
<script>
    var app = angular.module("myApp", []);//myapp为ng-app的名字
    app.controller("myCtrl", function ($scope) {//myctrl为控制器的名字,scope为内置对象
        $scope.firstName = "John";//可以理解为给属性赋值,然后上方的{{}}内容就会指向这里的数据
        $scope.lastName = "Doe";
    });
</script>

 

 

ng-app 指令用于告诉 AngularJS 应用当前这个元素是根元素

所有 AngularJS 应用都必须要要一个根元素。

HTML 文档中只允许有一个 ng-app 指令,如果有多个 ng-app 指令,则只有第一个会被使用。

ng-controller 指令用于为你的应用添加控制器。

在控制器中,你可以编写代码,制作函数和变量,并使用 scope 对象来访问。

 

ng-bind  ng-init

<div ng-app="" ng-init="myText='Hello World!'">//ng-init为创建一个指定的表达式
    <h1 ng-bind="myText"></h1>//ng-bind则是替换当前标签的内容为这个表达式或者变量

//也可以为下面的形式表示  是一样的效果

<h2 class="ng-bind:myText"></h2>

 

ng-bind-html

<script src="../js/angular.min.js"></script>
<script src="../js/angular-sanitize.min.js"></script>//angular的另一个库
<body>
<div ng-app="myApp" ng-controller="myCtrl">
    <p ng-bind-html="myText"></p>
</div>
<script>
    var app = angular.module("myApp", ['ngSanitize']);
    app.controller("myCtrl", function ($scope) {
        $scope.myText = "My name is:<h1>John Doe</h1>";
    });
</script>

ng-bind-html是通一个安全的方式将内容绑定到 HTML 元素上,将内容写入html,和ng-bind是有去区别

 

ng-bind-template

<div ng-app="myApp" ng-bind-template="{{firstName}} {{lastName}}"      ng-controller="myCtrl"></div>
<script>
    var app =      angular.module("myApp", []);
    app.controller("myCtrl", function($scope) {
        $scope.firstName = "John";
        $scope.lastName = "Doe";
    });
</script>

ng-bind-template 指令用于告诉 AngularJS 将给定表达式的值替换 HTML 元素的内容。

当你想在 HTML 元素上绑定多个表达式时可以使用 ng-bind-template 指令。

效果和ng-bind有些类似,但是使用方式不同

 

ng-blur

<body ng-app="">//记得要加上ng-app=””   不然不会起作用
<input ng-blur="count = count + 1" ng-init="count=0"/>
<h1>{{count}}</h1>
</body>

ng-blur 指令用于告诉 AngularJS HTML 元素在失去焦点时需要执行的表达式。

AngularJS 中的 ng-blur 指令不会覆盖原生的 onblur 事件, 如果触发该事件,ng-blur 表达式与原生的 onblur 事件都会执行。

 

 

ng-change

值改变事件

<body ng-app="myApp">//必要
<div ng-controller="myCtrl">//控制器
    <input type="text" ng-change="myFunc()" ng-model="myValue"/>

//ng-change为方法名,方法在下方  ,ng-model
    <p>改变了{{count}} </p>
</div>
<script>
    angular.module('myApp', [])
        .controller('myCtrl', ['$scope', function ($scope) {
            $scope.count = 0;
            $scope.myFunc = function () {
                $scope.count++;
            };
        }]);
</script>

 

ng-change为值改变触发的事件,需要和ng-model搭配使用,不会覆盖原生的 onchange 事件

 

用angular.module来注册和检索模块。所有模块应提供给一个应用程序必须使用这种机制注册。 当传递了2个或更多的参数时,创建一个新的模块。如果仅通过一个参数,一个现有的模块(作为第一个参数传递给模块)被检索。

 

 

ng-checked

ng-checked 指令用于设置复选框(checkbox)或单选按钮(radio)的 checked 属性。

如果 ng-checked 属性返回 true,复选框(checkbox)或单选按钮(radio)将会被选中。

ps:没啥用,直接用jquery做这个方便些

 

 

ng-class

<style>
    .sky {
        color:white;
        background-color:lightblue;
        padding:20px;
        font-family:"Courier New";
    }
    .tomato {
        background-color:coral;
        padding:40px;
        font-family:Verdana;
    }
</style>
<body ng-app="">
<select ng-model="home">//和下方的home绑定,以便于动态绑定class
    <option value="sky">Sky</option>//opiton的值对应的为样式
    <option value="tomato">Tomato</option>
</select>
<div ng-class="home">
    <h1>Welcome Home!</h1>
    <p>I like it!</p>
</div>

 

ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类。

ng-class 指令的值可以是字符串,对象,或一个数组。

如果是字符串,多个类名使用空格分隔。

如果是对象,需要使用 key-value 对,key 是一个布尔值,value 为你想要添加的类名。只有在 key 为 true 时类才会被添加。

如果是数组,可以由字符串或对象组合组成,数组的元素可以是字符串或对象

ps:感觉jquery的addclass某些时候更合适

 

ng-class-even

<style>
    .striped {
        color: white;
        background-color: black;
    }
</style>
<body ng-app="myApp">
<table ng-controller="myCtrl">
    <tr ng-repeat="x in records" ng-class-even="'striped'">//striped为上方的样式

//ng-repeat 在这里类似foreach循环 ,x为对象, records为数组
        <td>{{x.Name}}</td>
        <td>{{x.Country}}</td>
    </tr>
</table>
<script>
    var app = angular.module("myApp", []);
    app.controller("myCtrl", function ($scope) {
        $scope.records = [
            {
                "Name": "Alfreds Futterkiste",
                "Country": "Germany"
            },
            {
                "Name": "Berglunds snabbk",
                "Country": "Sweden"
            },
            {
                "Name": "Centro comercial Moctezuma",
                "Country": "Mexico"
            },
            {
                "Name": "Ernst Handel",
                "Country": "Austria"
            }
        ]
    });
</script>

 

为表格的偶数行设置class,用来设置隔行变色?jquery也有类似的功能

 

ng-class-odd

和上一个类似,这个为奇数

 

ng-click

点击事件,没多少好讲的

 

ng-cloak

<div ng-app="">

<p ng-cloak>{{ 5 + 5 }}</p>

</div>

页面加载时防止应用闪烁,加载时防止 AngularJS 代码未加载完而出现的问题

 

ng-copy

<body ng-app="">

<input ng-copy="count = count + 1" ng-init="count=0" value="拷贝这个文本" />

<p>文本被拷贝 {{count}} 次。</p>

<p>实例中变量 "count" 的值在输入框的文本被拷贝时会自动增加 1。</p>

</body>

在输入框的文本被拷贝时执行的操作

ng-copy 指令不会覆盖元素的原始 oncopy 事件, 事件触发时,ng-copy 表达式与原始的 oncopy 事件将都会执行

 

ng-csp

<body ng-app="" ng-csp>

ng-csp 指令用于修改 AngularJS 的安全策略。

如果使用了 ng-csp 指令, AngularJS 将不会执行eval 函数,这样就无法注入内联样式。

设置 ng-csp 指令为 no-unsafe-eval, 将阻止 AngularJS 执行 eval 函数,但允许注入内联样式。

设置 ng-csp 指令为 no-inline-style, 将阻止 AngularJS 注入内联样式,但允许 执行 eval 函数。

如果开发 Google Chrome 扩展或 Windows 应用 ng-csp 指令是必须的。

注意:ng-csp 指令不会影响 JavaScript,但会修改 AngularJS 的工作方式,这就意味着: 你仍然可以编写 eval 函数, 且也可以正常执行, 但是 AngularJS 不能执行它自己的 eval 函数。如果采用兼容模式,会降低 30% 的性能

 

听过用了能提高性能???

 

ng-cut

<input ng-cut="count = count + 1" ng-init="count=0" value="剪切这个文本" />

ng-cut 指令用于告诉 AngularJS 在剪切 HTML 元素的文本时需要执行的操作

ng-cut 指令用于告诉 AngularJS 在剪切 HTML 元素的文本时需要执行的操作。

ng-cut 指令指令不会覆盖元素的原始 oncut 事件, 事件触发时,ng-cut 表达式与原始的 oncut 事件将都会执行。

 

ng-dblclick

<h1 ng-dblclick="count = count + 1" ng-init="count=0">Welcome</h1>

 

ng-dblclick 指令用于告诉 AngularJS 在鼠标双击 HTML 元素时需要执行的操作。

ng-dblclick 指令不会覆盖元素的原始 ondblclick 事件, 鼠标双击时,ng-dblclick 表达式与原始的 ondblclick 事件将都会执行。

 

ng-disabled

<body ng-app="">
点击这里禁用所有表单输入域:<input type="checkbox" ng-model="all"><br>//将all为的值绑定当前标签的属性,选中为true
<br>
<input type="text" ng-disabled="all">//all为ng-model绑定的属性
<input type="radio" ng-disabled="all">
<select ng-disabled="all">
    <option>Female</option>
    <option>Male</option>
</select>

 

ng-disabled 指令设置表单输入字段的 disabled 属性(input, select, 或 textarea)。

如果 ng-disabled 中的表达式返回 true 则表单字段将被禁用。

 

ng-focus

<body ng-app="">
<input ng-focus="count = count + 1" ng-init="count=0" />
<h1>{{count}}</h1>

ng-focus 指令用于告诉 AngularJS 在 HTML 元素获取焦点时需要执行的操作。

ng-focus 指令不会覆盖元素的原始 onfocus 事件, 事件触发时,ng-focus 表达式与原始的 onfocus 事件将都会执行。

 

ng-hide

<body ng-app="">
<input type="checkbox" ng-model="myVar">
<div ng-hide="myVar">
    <h1>Welcome</h1>
    <p>Welcome to my home.</p>
</div>

 

ng-hide 指令在表达式为 true 时隐藏 HTML 元素。

ng-hide 是 AngularJS 的预定义类,设置元素的 display 为 none

 

 

ng-href

<body ng-app="">
<div ng-init="myVar = 'http://www.baidu.com'">
    <h1>AngularJS中文网</h1>
    <p>访问 <a ng-href="{{myVar}}">{{myVar}}</a>      学习!</p>
</div>

ng-href 指令覆盖了原生的 <a> 元素 href 属性。

如果在 href 的值中有 AngularJS 代码,则需要使用 ng-href 而不是 href

ng-href 指令确保了链接是正常的,即使在 AngularJS 执行代码前点击链接

 

ng-if

<body ng-app="">
<input type="checkbox" ng-model="myVar" ng-init="myVar = true">

//ng-model绑定属性,ng-init创建表达式
<div ng-if="myVar">//if判断
    <h1>Welcome</h1>
    <p>Welcome to my home.</p>
    <hr>
</div>

ng-if 指令用于在表达式为 false 时移除 HTML 元素。

如果 if 语句执行的结果为 true,会添加移除元素,并显示。

ng-if 指令不同于 ng-hide, ng-hide 隐藏元素,而 ng-if 是从 DOM 中移除元素

 

ng-include(特殊)

<body ng-app="">
<iframe frameborder="0" scrolling="no" src="demo.html" seamless></iframe>
123123
<div ng-include="'demo.html'"></div>
12312

 

ng-include 指令用于包含外部的 HTML 文件。

包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在同一个域名下。

ps:这个include和jsp标签的include是一样的,包括小脚本,但是和这个iframe差距还是很大,当你用上方代码测试就知道了,如果当你在html页面想要jsp标签的include的效果时,可以用这个.

 

 

ng-keydown  ng-keypress  ng-keyup

分别为按下,按下中,弹回事件

<body ng-app="">
<input ng-keydown="count = count + 1" ng-init="count=0" />
<h1>{{count}}</h1>

按下键盘产生的操作,任务键盘即可

ps:建议使用jquery的keydown/keypress/keyup事件,可以指定特定的键产生特定的事件

 

 

ng-list

<div ng-app="">
    <input ng-model="customers" ng-list="."/>
    <pre>{{customers}}</pre>

 

ng-list 指令将字符串转换为数组,并使用逗号分隔。

ng-list 指令还有另外一种转换方式,如果你有字符串数组希望在输入框中显示,你可以在 input 上使用 ng-list 指令。

ng-list 属性值定义了分隔符。不设置则默认为,

 

ng-model

<div ng-app="myApp" ng-controller="myCtrl" >
    <input ng-model="name">
</div>
<script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
        $scope.name      = "John Doe";
    });
</script>

ng-model 指令绑定了 HTML 表单元素到 scope 变量中。

如果 scope 中不存在变量, 将会创建它。

<div ng-app="" ng-init="name='123'" >
    <input ng-model="name">
</div>

一样的效果

 

 

ng-mousedown  ng-mouseenter  ng-mouseleave  ng-mousemove

鼠标按下进行的操作         鼠标光标穿过的操作       光标离开触发            光标移动操作

ng-mouseover   

光标移动到元素上时执行

 

以上也可以用jquery的事件代替

 

ng-non-bindable

<div ng-app="">
    <p ng-non-bindable>这个代码不需要使用 AngularJS: {{ 5+5 }}</p>
</div>

用于告诉 AngularJS 当前的 HTML 元素或其子元素不需要编译

 

ng-open

<body ng-app="">
<input type="checkbox" ng-model="showDetails">
<details ng-open="showDetails">
    <summary>学的不仅是技术,更是梦想!</summary>
    <p> - 菜鸟教程</p>
</details>

 

ng-open 指令用于设置 details 列表的 open 属性。

如果 ng-open 的表达式返回 true 则 details 列表是可见的。

 

ng-options

<div ng-app="myApp" ng-controller="myCtrl">
    <select ng-model="selectedName" ng-options="item.id as item.name for item in names">

//item.id这个部分是设置value,item.name这个部分是设置label的属性值,names为下方的names,这个类似foreach
        <option value="">123</option>
    </select>
    <input value="123" type="button" ng-click="ff()">
</div>
<script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function ($scope) {
        $scope.names = [{name: "aaaa", id: "1"},
            {name: "bbbb", id: "2"},
            {name: "ccc", id: "3"}];
        $scope.ff = function () {
            //取值
            alert($scope.selectedName);
        }
    });
</script>

ng-options 指令用于使用 <options> 填充 <select> 元素的选项。

ng-options 指令使用数组来填充下拉列表,多数情况下与 ng-repeat 指令一起使用。

 

 

ng-paste

<body ng-app="">
<input ng-paste="count = count + 1" ng-init="count=0" value="粘贴文本到这"  />
{{count}}
</body>

 

ng-paste 指令用于告诉 AngularJS 文本在 HTML 元素上粘贴时需要执行的操作。

ng-paste 指令不会覆盖元素的原生 onpaste 事件, 事件触发时,ng-paste 表达式与原生的 onpaste 事件将都会执行。

 

ng-readonly

<body ng-app="">
Readonly: <input type="checkbox" ng-model="all">
<br>
<input type="text" ng-readonly="all">

 

ng-readonly 指令用于设置表单域(input 或 textarea) 的 readonly 属性。

如果 ng-readonly 属性的表达式返回 true 则表单域为只读。

 

 

ng-repeat

<body ng-app="myApp">
<div ng-controller="simpleController">//控制器
    <ul>
        <li ng-repeat="site in sites">//类似foreach循环
            编号:{{$index+1}} ----网站名称:{{site.name}}----网站地址:{{site.path}}
            --{{$index}}--{{$first}}--{{$middle}}--{{$last}}--{{$even}}--{{$odd}}
        </li>
    </ul>
</div>
<script>
    var app = angular.module("myApp", []);
    app.controller('simpleController', function ($scope) {
        $scope.sites = [
            {name: '百度', path: 'www.baidu.com'},
            {name: '新浪', path: 'www.sina.com.cn'},
            {name: '腾讯', path: 'www.qq.com'}
        ]
    });
</script>

特殊变量:

 

 

ng-selected

<body ng-app="">
点击复选框选择 BMW 选项:
<input type="checkbox" ng-model="mySel">
<p>我喜欢的车:</p>
<select>
    <option>Volvo</option>
    <option ng-selected="mySel">BMW</option>
    <option>Ford</option>
</select>

ng-selected 指令用于设置 <select> 列表中的 <option> 元素的 selected 属性。

ng-selected 属性的表达式返回 true 则选项被选中。

 

ng-show

<body ng-app="">
显示 HTML: <input type="checkbox" ng-model="myVar">
<div ng-show="myVar">
    <h1>Welcome</h1>
    <p>Welcome to my home.</p>
</div>

 

ng-show 指令在表达式为 true 时显示指定的 HTML 元素,否则隐藏指定的 HTML 元素。

 

ng-src

<body ng-app="">
<div ng-init="myVar = '../image/img2.png'">
    <h1>Angular</h1>
    <img ng-src="{{myVar}}">
</div>

ng-src 指令覆盖了 <img> 元素的 src 属性。如果你使用了 AngularJS 代码设置图片地址,请使用 ng-src 指令替代 src 属性。ng-src 指令确保的 AngularJS 代码执行前不显示图片。

 

ng-srcset

<body ng-app="">
<div ng-init="myVar = '../image/img2.png'">
    <h1>Angular</h1>
    <img ng-srcset="{{myVar}}">
</div>

ng-srcset 指令覆盖了 <img> 元素的 srcset 属性。

如果你使用了 AngularJS 代码设置图片地址,请使用 ng-srcset 指令替代 srcset 属性。

ng-srcset 指令确保的 AngularJS 代码执行前不显示图片。

img 元素的 srcset 属性用于浏览器根据宽、高和像素密度来加载相应的图片资源

 

ng-style

<body ng-app="myApp" ng-controller="myCtrl">
<h1 ng-style="myObj">菜鸟教程</h1>
<script>
    var app = angular.module("myApp", []);
    app.controller("myCtrl", function ($scope) {
        $scope.myObj = {
            "color": "white",
            "background-color": "coral",
            "font-size": "60px",
            "padding": "50px"
        }
    });
</script>

ng-style 指令为 HTML 元素添加 style 属性。ng-style 属性值必须是对象,表达式返回的也是对象。

对象由 CSS 属性和值注册,即 key=>value 对。

 

 

ng-submit

<body ng-app="myApp" ng-controller="myCtrl">
<form ng-submit="myFunc()">
    <input type="text">
    <input type="submit">
</form>
<p>{{myTxt}}</p>
<script>
    var app = angular.module("myApp",      []);
    app.controller("myCtrl", function($scope) {
        $scope.myTxt      = "你还没有点击提交!";
        $scope.myFunc =      function () {
            $scope.myTxt =      "你点击了提交!";
        }
    });
</script>

 

ng-submit 指令用于在表单提交后执行指定函数。

 

ng-switch

<body ng-app="">
我喜欢的网站
<select ng-model="myVar">
    <option value="runoob">www.runoob.com
    <option value="google">www.google.com
    <option value="taobao">www.taobao.com
</select>
<hr>
<div ng-switch="myVar">
    <div ng-switch-when="runoob">
        <h1>菜鸟教程</h1>
        <p>欢迎访问菜鸟教程</p>
    </div>
    <div ng-switch-when="google">
        <h1>Google</h1>
        <p>欢迎访问Google</p>
    </div>
    <div ng-switch-when="taobao">
        <h1>淘宝</h1>
        <p>欢迎访问淘宝</p>
    </div>
    <div ng-switch-default>
        <h1>切换</h1>
        <p>选择不同选项显示对应的值。</p>
    </div>
</div>
<hr>
<p> ng-switch 指令根据当前的值显示或隐藏对应部分。</p>

ng-switch 指令根据表达式显示或隐藏对应的部分。

对应的子元素使用 ng-switch-when 指令,如果匹配选中选择显示,其他为匹配的则移除。

你可以通过使用 ng-switch-default 指令设置默认选项,如果都没有匹配的情况,默认选项会显示。

 

ng-value

<div ng-app="myApp" ng-controller="myCtrl">
    <input ng-value="myVar">
</div>
<script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
        $scope.myVar      = "Hello World!";
    });
</script>

或者

<div ng-app="" ng-init="myVar=123">
    <input ng-value="myVar">
</div>//赋死值

 

ng-value 指令用于设置 input 或 select 元素的 value 属性。

猜你喜欢

转载自blog.csdn.net/qq_41594146/article/details/83035709