angular.js 指令

AngularJS 指令

AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-

ng-app 指令初始化一个 AngularJS 应用程序。

ng-init 指令初始化应用程序数据。

ng-model 指令把元素值(比如输入域的值)绑定到应用程序。

 

ng-app 指令

ng-app 指令定义了 AngularJS 应用程序的 根元素

ng-app 指令在网页加载完毕时会自动引导(自动初始化)应用程序。

稍后您将学习到 ng-app 如何通过一个值(比如 ng-app="myModule")连接到代码模块。

 

ng-init 指令

ng-init 指令为 AngularJS 应用程序定义了 初始值

通常情况下,不使用 ng-init。您将使用一个控制器或模块来代替它。

稍后您将学习更多有关控制器和模块的知识。

 

ng-model 指令

ng-model 指令 绑定 HTML 元素 到应用程序数据。

ng-model 指令也可以:

         为应用程序数据提供类型验证(number、email、required)。

         为应用程序数据提供状态(invalid、dirty、touched、error)。

         为 HTML 元素提供 CSS 类。

         绑定 HTML 元素到 HTML 表单。

ng-repeat 指令

ng-repeat 指令对于集合中(数组中)的每个项会 克隆一次 HTML 元素

 

创建自定义的指令

除了 AngularJS 内置的指令外,我们还可以创建自定义指令。

你可以使用 .directive 函数来添加自定义的指令。

要调用自定义指令,HTML 元素上需要添加自定义指令名。

使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:

 

<body ng-app="myApp">

<runoob-directive></runoob-directive>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        template : "<h1>自定义指令!</h1>"
    };
});
</script>

</body>

可以通过以下方法调用指令

   元素名   <runoob-directive></runoob-directive>;

   属性     <div runoob-directive></div>;

   类名     <div class="runoob-directive"></div>;

   注释     <!--directive:runoob-directive-->;

限制使用

你可以限制你的指令只能通过特定的方式来调用。   

 

var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        restrict : "A",
        template : "<h1>自定义指令!</h1>"
    };
});

 通过添加 restrict 属性,并设置只值为 "A", 来设置指令只能通过属性的方式来调用.如果设置值为"AC",则是通过属性和类名来调用指令。

restrict值可以是下面几种:

   E作为元素名使用

   A作为元属性使用

   C作为元类名使用

   M作为元注释使用

ng-style  可以使用一个结构直接来表示当前节点的样式:

<div ng-style="{wwidth:100,height:100,background:'red'}"></div>

ng-class 直接设置当前节点的类,配合数据绑定作用很大

<div  ng-controller="textCtrl"  ng-class="cla"></div>

ng-class-even 和ng-class-odd是和ng-repeat配合使用的

<ul ng-init="l=[1,2,3,4]">
	<li ng-class-odd="odd" ng-class-even="even" ng-repeat="m in l">{{m}}</li>
</ul>

 ng-show ng-hide  显示和隐藏 ng-switch  根据一个值来决定那个节点显示,其它移除

<div ng-init="a=2">
	<ul ng-switch on="a">
		<li ng-switch-when="1">1</li>
		<li ng-switch-when="2">2</li>
		<li ng-switch-default>other</li>
	</ul>
</div>

 ng-src控制src属性

<img ng-src="{{'h'+'ead,png'}}"/>

 ng-href控制href属性

<a ng-href="{{'#'+'123'}}">here</a>

 ng-form

起初不明白为什么会有个表单指令,<form>标签感觉也够用啊。
以表单验证为例,

<input type="submit" ng-disabled="mainForm.$invalid" />

 也就是表单的状态为$invalid时禁用提交按钮。

如果场景再稍微复杂一点点,比如一个父表单中有多个子表单,子表单中有3个验证通过时父表单便可以提交。
但是,<form>是不可以嵌套的。
考虑到这种场景,我们便使用ng-form指令来解决这一问题。

<form name="mainForm" novalidate>
     <div ng-form="form1">
         姓名:<input type="text" ng-required="true" ng-model="name"/><br>
         证件号码:<input type="number" ng-minLength="15" ng-maxLength="18" ng-required="true" ng-model="idnum"/>
     </div>
     <br>
     <div ng-form="form2">
         监护人姓名:<input type="text" ng-required="true" ng-model="gname"/><br>
         监护人证件号码:<input type="number" ng-minLength="15" ng-maxLength="18" ng-required="true" ng-model="gidnum"/>
     </div>
     <button ng-disabled="form1.$invalid && form2.$invalid">submit all</button>
 </form>

ng-checked 选中状态 

<input type="checkbox" ng-checked="someProperty" ng-init="someProperty = true" ng-model="someProperty">

 

ng-selected 被选中状态 

 

<label>
     <input type="checkbox" ng-model="isFullStack">
     I'm Full Stack Engineer
 </label>
 <select>
     <option>Front-End</option>
     <option>Back-End</option>
     <option ng-selected="isFullStack">Full Stack !!!</option>
 </select>
  

 

ng-disabled 禁用状态 

  

<textarea ng-disabled="1+1==2">1+1=?</textarea>

 

ng-multiple 多选状态 

 

ng-readonly 只读状态 

 

 <input type="text" ng-readonly="stopTheWorld" value="stop the world after 3s"/>
 .run(function($rootScope,$timeout){
     $rootScope.stopTheWorld=false;
     $timeout(function(){
         $rootScope.stopTheWorld = true;
     },3000)
 })

 

ng-bind

ng-bind的行为和{{}}差不多,只是我们可以用这个指令来避免FOUC(Flash Of Unrendered Content),也就是未渲染导致的闪烁。

ng-cloak

ng-cloak也可以为我们解决FOUC。 ng-cloak会将内部元素隐藏,直到路由调用对应的页面。

ng-if

如果ng-if中的表达式为false,则对应的元素整个会从DOM中移除而非隐藏,但审查元素时你可以看到表达式变成注释了。
如果相进行隐藏,可以使用ng-hide。

上面的这是只是单向绑定(ng-model除外),即只是从数据到展示,不能反作用于数据。

猜你喜欢

转载自455935725.iteye.com/blog/2358744