搜索
您的当前位置:首页正文

Angular-指令总汇

2023-11-26 来源:软文情感网

2017-06-08

Angular指令。

ng-init:初始化数据

在属性值中用 = 符号为变量值,用户;隔开,并且不能使用var

ng-app:开启angular应用模式,一个页面只能出现一次

可以有属性值,但要在js中定义这个项目,如果没有属性值,可以直接在是视图中使用了

ng-model:双向数据绑定

ng-bind:插值的另一种写法页面渲染时看不到插值符号

ng-repeat:循环

ng-show:是否显示

<div> ng-show="true"</div>

ng-hide:是否隐藏

<div ng-hide="true"></div>

Angular.module获取应用程序的

var arr = angular.module("mk",[])

第一个参数表示app表示

第二个参数表示依赖集合

即使没有依赖也要写上空数组

controller定义控制器的

arr.controller("kz",function($scope){})

第一个参数表示控制器的名称

第二个参数表示工厂方法

默认没有参数

作用域是一个空对象

小编还为您整理了以下内容,可能对您也有帮助:

angular具有的指令类型

Angular具有的指令类型主要分为四种,分别是组件指令、属性指令、结构指令和装饰器指令。

1. 组件指令(Component Directives):这是Angular中最重要且最常见的指令类型。组件是Angular应用的基本构建块,它们通常包含模板、样式以及用于处理数据和用户交互的控制器。例如,我们可以通过@Component装饰器创建一个组件,这个装饰器实际上就是一个组件指令。在组件模板中,我们可以使用内置的指令(如ngIf、ngFor),也可以创建自定义的指令。

2. 属性指令(Attribute Directives):属性指令用于改变元素、组件或其他指令的行为和外观。例如,Angular内置的NgStyle和NgClass就是属性指令。我们也可以创建自定义属性指令,通过@Directive装饰器并指定selector为属性名来实现。

3. 结构指令(Structural Directives):结构指令通过添加和移除DOM元素来改变布局。例如,ngIf和ngFor就是内置的结构指令。自定义的结构指令可以通过@Directive装饰器并作为组件模板的一部分来实现。

4. 装饰器指令(Decorator Directives):装饰器指令是用来修改类、方法、访问器、属性或参数的行为的特殊类型的声明。在Angular中,@Component、@Directive和@Injectable等都是装饰器指令。它们会修改类的行为,或者为类添加额外的功能。

以上这些指令都是Angular框架的重要组成部分,它们提供了一种高效、灵活的方式来构建复杂的前端应用。对于开发者来说,理解和掌握这些指令是学习和使用Angular的关键。同时,由于Angular的模块化设计,我们可以在不同的项目中重复使用这些指令,大大提高了开发效率和代码复用性。

angular编程的一些基础知识都有哪些?

对于程序员来说,除了需要了解不同的编程语言的特点以外,同时对于编程语言的使用都有自己的风格。今天,电脑培训就一起来了解一下,angular编程的一些基础知识都有哪些。

一、指令的简介

指令其实就是angularjs对html的一个扩展,实现自定义html元素

angularjs其自身封装了一些常用的系统指令,我们也可以根据需要自定义指令

二、自定义指令简介

自定义指令的基本格式

app.directive("指令名称",function(){

restrict:'指令匹配格式',

replace:true,是否自定义元素替代指令申明

template:'百度一下'

});

自定义指令关键词说明:

指令名称说明:名字一般采用驼峰命名,及字母小写其余单词大写

在调用时,要将大写字母转换为小写并加上-

举例:myDirectiveTest调用为:my-directive-test

restrict有四种枚举值:

E:指令按照元素来匹配

使用:

C:按照class来匹配

使用:

A:按照属性来匹配

使用:

M:按照注释来匹配

angular内置指令 ng-disabled


2017-06-08

Angular指令。

ng-init:初始化数据

在属性值中用 = 符号为变量值,用户;隔开,并且不能使用var

ng-app:开启angular应用模式,一个页面只能出现一次

可以有属性值,但要在js中定义这个项目,如果没有属性值,可以直接在是视图中使用了

ng-model:双向数据绑定

ng-bind:插值的另一种写法页面渲染时看不到插值符号

ng-repeat:循环

ng-show:是否显示

<div> ng-show="true"</div>

ng-hide:是否隐藏

<div ng-hide="true"></div>

Angular.module获取应用程序的

var arr = angular.module("mk",[])

第一个参数表示app表示

第二个参数表示依赖集合

即使没有依赖也要写上空数组

controller定义控制器的

arr.controller("kz",function($scope){})

第一个参数表示控制器的名称

第二个参数表示工厂方法

默认没有参数

作用域是一个空对象

angular内置指令 ng-disabled


2017-06-08

Angular指令。

ng-init:初始化数据

在属性值中用 = 符号为变量值,用户;隔开,并且不能使用var

ng-app:开启angular应用模式,一个页面只能出现一次

可以有属性值,但要在js中定义这个项目,如果没有属性值,可以直接在是视图中使用了

ng-model:双向数据绑定

ng-bind:插值的另一种写法页面渲染时看不到插值符号

ng-repeat:循环

ng-show:是否显示

<div> ng-show="true"</div>

ng-hide:是否隐藏

<div ng-hide="true"></div>

Angular.module获取应用程序的

var arr = angular.module("mk",[])

第一个参数表示app表示

第二个参数表示依赖集合

即使没有依赖也要写上空数组

controller定义控制器的

arr.controller("kz",function($scope){})

第一个参数表示控制器的名称

第二个参数表示工厂方法

默认没有参数

作用域是一个空对象

angular中使用指令directives


2017-06-08

Angular指令。

ng-init:初始化数据

在属性值中用 = 符号为变量值,用户;隔开,并且不能使用var

ng-app:开启angular应用模式,一个页面只能出现一次

可以有属性值,但要在js中定义这个项目,如果没有属性值,可以直接在是视图中使用了

ng-model:双向数据绑定

ng-bind:插值的另一种写法页面渲染时看不到插值符号

ng-repeat:循环

ng-show:是否显示

<div> ng-show="true"</div>

ng-hide:是否隐藏

<div ng-hide="true"></div>

Angular.module获取应用程序的

var arr = angular.module("mk",[])

第一个参数表示app表示

第二个参数表示依赖集合

即使没有依赖也要写上空数组

controller定义控制器的

arr.controller("kz",function($scope){})

第一个参数表示控制器的名称

第二个参数表示工厂方法

默认没有参数

作用域是一个空对象

angular中使用指令directives


2017-06-08

Angular指令。

ng-init:初始化数据

在属性值中用 = 符号为变量值,用户;隔开,并且不能使用var

ng-app:开启angular应用模式,一个页面只能出现一次

可以有属性值,但要在js中定义这个项目,如果没有属性值,可以直接在是视图中使用了

ng-model:双向数据绑定

ng-bind:插值的另一种写法页面渲染时看不到插值符号

ng-repeat:循环

ng-show:是否显示

<div> ng-show="true"</div>

ng-hide:是否隐藏

<div ng-hide="true"></div>

Angular.module获取应用程序的

var arr = angular.module("mk",[])

第一个参数表示app表示

第二个参数表示依赖集合

即使没有依赖也要写上空数组

controller定义控制器的

arr.controller("kz",function($scope){})

第一个参数表示控制器的名称

第二个参数表示工厂方法

默认没有参数

作用域是一个空对象

angularjs有多少种指令

控制器定义有两个参数, 第一个是控制器名称(字符串), 第二个是一个函数或者数组, 当为函数时, 表示控制器的构造函数, , 当为数组时, 数组前面的元素为构造函数用到的字符串形式的服务, 数组最后一个元素为构造函数, 此时构造函数的参数列表和数组前面元素是一一对应的

angularjs有多少种指令

控制器定义有两个参数, 第一个是控制器名称(字符串), 第二个是一个函数或者数组, 当为函数时, 表示控制器的构造函数, , 当为数组时, 数组前面的元素为构造函数用到的字符串形式的服务, 数组最后一个元素为构造函数, 此时构造函数的参数列表和数组前面元素是一一对应的

angularjs 自定义指令控制input只能输入数字和字母

解决方法:

$scope.m=function(e){
var ss=window.event||e;
if(!((ss.keyCode>47&&ss.keyCode<58)||(ss.keyCode>64&&ss.keyCode<91)||(ss.keyCode>95&&ss.keyCode<106))){
ss.preventDefault();}
}

<input type="text" ng-keydown="m()">,只能输入数字跟字母。

1、AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

2、AngularJS 是一个 JavaScript 框架。它是一个以 JavaScript 编写的库。它可通过 <script> 标签添加到 HTML 页面。AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。AngularJS 是以一个 JavaScript 文件形式发布的,可通过 script 标签添加到网页中。

angularjs 自定义指令控制input只能输入数字和字母

解决方法:

$scope.m=function(e){
var ss=window.event||e;
if(!((ss.keyCode>47&&ss.keyCode<58)||(ss.keyCode>64&&ss.keyCode<91)||(ss.keyCode>95&&ss.keyCode<106))){
ss.preventDefault();}
}

<input type="text" ng-keydown="m()">,只能输入数字跟字母。

1、AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

2、AngularJS 是一个 JavaScript 框架。它是一个以 JavaScript 编写的库。它可通过 <script> 标签添加到 HTML 页面。AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。AngularJS 是以一个 JavaScript 文件形式发布的,可通过 script 标签添加到网页中。

AngularJS中directive指令使用之事件绑定与指令交互用法示例

本文实例讲述了AngularJS中directive指令使用之事件绑定与指令交互用法。分享给大家供大家参考,具体如下:
AngularJS中模板的使用,事件绑定以及指令与指令之间的交互
<!doctype
html>
<html
ng-app="myapp">
<head>
<meta
charset="utf-8"/>
</head>
<body
ng-controller="ShieldController">
<div>
<who></who>
</div>
<div>
<button
you-btn></button>
</div>
<theshield
reigns>343</theshield>
<theshield
reigns>fdhg</theshield>
<theshield
rollins>hhh</theshield>
<theshield
ambros>kkk</theshield>
</body>
<script
src="./js/angular.min.js"></script>
<script>
var
app
=
angular.mole('myapp',[]);
/*=======================1.
模板的使用
========================*/
app.directive('who',function(){
return
{
restrict:"E",
//元素element
的意思
link:function(scope,element,attrs){
console.log(element);
element[0].innerHTML
=
'sdfhkj';
//这个优先级别最高
},
//templateUrl:"param.html",
//这个不显示
优先级别最低
template:"<h1>jkdhf</h1>"
//这个显示
优先级别其次
};
});
/*=======================2.
事件的绑定
========================*/
app.directive('youBtn',function(){
return
{
restrict:"A",
//attribute
属性的意思
link:function(scope,element,attrs){
console.log(element);
element[0].innerHTML
=
'my
btn';
//事件绑定
element.bind('mouseenter',function(){
element[0].innerHTML
=
'your
btn';
});
element.bind('mouseleave',function(){
element[0].innerHTML
=
'her
btn';
});
}
};
});
/*=======================3.
元素
属性
控制器之间的交互========================*/
app.controller('ShieldController',function($scope){
$scope.shieldNames
=
[];
this.addReigns
=
function(){
$scope.shieldNames.push("reigns:jjj");
}
this.addRollins
=
function(){
$scope.shieldNames.push("Rollins:hhh");
}
this.addAmbros
=
function(){
$scope.shieldNames.push("Ambros:ggg");
}
})
.directive('reigns',function(){
return
{
require:"theshield",
link:function(scope,element,attrs,ShieldController){
ShieldController.addReigns();
}
};
})
.directive('rollins',function(){
return
{
require:"theshield",
link:function(scope,element,attrs,ShieldController){
ShieldController.addRollins();
}
};
})
.directive('ambros',function(){
return
{
require:"theshield",
link:function(scope,element,attrs,ShieldController){
ShieldController.addAmbros();
}
};
})
.directive('theshield',function(){
return
{
restrict:"E",
controller:"ShieldController",
//指定控制器
scope:{},
//清空该指令处的$scope

link:function(scope,element,attrs){
element.bind('mouseenter',function(){
//对于该指令所对应的元素绑定对应的事件
console.log(scope.shieldNames);
});
}
};
});
</script>
</html>
希望本文所述对大家AngularJS程序设计有所帮助。

AngularJS中directive指令使用之事件绑定与指令交互用法示例

本文实例讲述了AngularJS中directive指令使用之事件绑定与指令交互用法。分享给大家供大家参考,具体如下:
AngularJS中模板的使用,事件绑定以及指令与指令之间的交互
<!doctype
html>
<html
ng-app="myapp">
<head>
<meta
charset="utf-8"/>
</head>
<body
ng-controller="ShieldController">
<div>
<who></who>
</div>
<div>
<button
you-btn></button>
</div>
<theshield
reigns>343</theshield>
<theshield
reigns>fdhg</theshield>
<theshield
rollins>hhh</theshield>
<theshield
ambros>kkk</theshield>
</body>
<script
src="./js/angular.min.js"></script>
<script>
var
app
=
angular.mole('myapp',[]);
/*=======================1.
模板的使用
========================*/
app.directive('who',function(){
return
{
restrict:"E",
//元素element
的意思
link:function(scope,element,attrs){
console.log(element);
element[0].innerHTML
=
'sdfhkj';
//这个优先级别最高
},
//templateUrl:"param.html",
//这个不显示
优先级别最低
template:"<h1>jkdhf</h1>"
//这个显示
优先级别其次
};
});
/*=======================2.
事件的绑定
========================*/
app.directive('youBtn',function(){
return
{
restrict:"A",
//attribute
属性的意思
link:function(scope,element,attrs){
console.log(element);
element[0].innerHTML
=
'my
btn';
//事件绑定
element.bind('mouseenter',function(){
element[0].innerHTML
=
'your
btn';
});
element.bind('mouseleave',function(){
element[0].innerHTML
=
'her
btn';
});
}
};
});
/*=======================3.
元素
属性
控制器之间的交互========================*/
app.controller('ShieldController',function($scope){
$scope.shieldNames
=
[];
this.addReigns
=
function(){
$scope.shieldNames.push("reigns:jjj");
}
this.addRollins
=
function(){
$scope.shieldNames.push("Rollins:hhh");
}
this.addAmbros
=
function(){
$scope.shieldNames.push("Ambros:ggg");
}
})
.directive('reigns',function(){
return
{
require:"theshield",
link:function(scope,element,attrs,ShieldController){
ShieldController.addReigns();
}
};
})
.directive('rollins',function(){
return
{
require:"theshield",
link:function(scope,element,attrs,ShieldController){
ShieldController.addRollins();
}
};
})
.directive('ambros',function(){
return
{
require:"theshield",
link:function(scope,element,attrs,ShieldController){
ShieldController.addAmbros();
}
};
})
.directive('theshield',function(){
return
{
restrict:"E",
controller:"ShieldController",
//指定控制器
scope:{},
//清空该指令处的$scope

link:function(scope,element,attrs){
element.bind('mouseenter',function(){
//对于该指令所对应的元素绑定对应的事件
console.log(scope.shieldNames);
});
}
};
});
</script>
</html>
希望本文所述对大家AngularJS程序设计有所帮助。

angular具有的指令类型不包括

angular具有的指令类型不包括“组件指令”。

首先需要解释Angular中的指令是什么。在Angular框架中,指令是一种特殊的标记,它可以附着在DOM元素上,用来改变元素的行为、外观或者值。例如,内置的ngStyle指令可以用来动态设置元素的样式。

在Angular中,有三种类型的指令:组件、属性型和结构型。组件是Angular中最重要的指令类型,但它们不被认为是“指令”,这就是为什么我会说“angular具有的指令类型不包括组件指令”。组件是Angular应用的基本构建块,它们负责管理和显示应用的数据和视图。属性型指令改变元素、组件或其一部分的外观或行为。例如,内置的ngModel指令就是一种属性型指令,它可以实现双向数据绑定。结构型指令通过添加、移除或替换DOM元素来改变DOM布局。例如,ngFor和ngIf就是两种常见的结构型指令。

尽管组件在功能和实现上与指令有相似之处,但它们被视为的实体,而不是指令的一种类型。这是因为组件在Angular中的地位特殊,它们不仅仅是行为的改变者,还是视图的创建者和数据的管理者。把组件看作是指令的一种类型,可能会模糊这种重要的区别,因此,我们通常不将组件视为指令的一种。

为什么使用AngularJS 指令

使用过 AngularJS 的朋友应该最感兴趣的是它的指令。现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架。
目前有很多JavaScript. 产品提供插件给Web开发人员。例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包。但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript. 模式来写 jQuery 代码来激活插件虽然jQuery 代码写起来十分简单,但是必须和HTML进行同步,这是一个单调乏味且容易出错的过程。
AngularJS主页展示了一个简单的例子,用于实现Bootstrap中的 Tab功能,可以在页面中轻松添加 Tab 功能,并且使用方法和 ul 标签一样简单。HTML代码如下:
复制代码

BootStrap Tab Component

This is the content of the first tab.

This is the content of the second tab.

复制代码
JavaScript代码如下:
复制代码
angular.mole('components', []).
directive('tabs', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
controller: [ "$scope", function($scope) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
}],
template:
'
' +

'
' +

'
'+

'{{pane.title}}' +
'
' +

'
' +

'
' +

'
',

replace: true
};
}).
directive('pane', function() {
return {
require: '^tabs',
restrict: 'E',
transclude: true,
scope: { title: '@' },
link: function(scope, element, attrs, tabsCtrl) {
tabsCtrl.addPane(scope);
},
template:
'
' +

'
',

replace: true
};
})
复制代码
你可以从以下链接查看效果:http://jsfiddle.net/powertoolsteam/GBE7N/1/
image
正如你所见,除了拥有用于实现指令的 和 标签,页面和常规HTML页面没有什么区别。HTML开发人员无需编写任何代码。当然,总需要有第一个吃螃蟹的人,创建指令共享使用,但是目前Tabs指令已经很常见了,可以在任何地方复用(如BootStrap,、jQueryUI、Wijmo, 和一些知名的前端插件集)。
由于指令的易用和易编写,许多用户已经开始使用AngularJS编写指令了。例如, AngularJS 开发组已经基于AngularJS实现了一系列指令-UI Bootstrap 来代替Bootstrap; 知名ComponentOne 控件厂商也在AngularJS 基础上创建了Wijmo ;我们也可以在GitHub上找到一些公共指令资料库:jQueryUI widgets。
拥有了 AngularJS,是不是觉得自己已经站在了巨人的肩膀上了?但是不要高兴的太早,如果已经有了这么多的指令供我们使用,那我们为什么还要学习AngularJS ,为什么还要学习自定义指令呢?
举个简单的例子,也许你有特殊的需求:假设你在一家财务公司工作,你需要创建一张财务表单,它需要以表格的形式展示数据、拥有绑定、编辑、校验并且同步数据更新到服务器的功能。表单插件很常见但是能够满足这些具体需求的不得而知了,所以你必须根据实际业务需求来创建自定义指令。
复制代码

Offshore Investment Summary

customer="currentCustomer"
country="currentCountry">

复制代码
这就是本篇文章的目的,接下来我们会讨论如何创建 AngularJS指令。
创建自定义AngularJS 指令
文章开头的自定义指令十分的简单。它仅仅实现了同步的功能。一般指令是包含更多元素的:
复制代码
//创建指令模块 (或者检索现有模块)
var m = angular.mole("myApp");
// 创建"my-dir"指令
myApp.directive("myDir", function() {
return {
restrict: "E", // 指令是一个元素 (并非属性)
scope: { // 设置指令对于的scope
name: "@", // name 值传递 (字符串,单向绑定)
amount: "=", // amount 引用传递(双向绑定)
save: "&" // 保存操作
},
template: // 替换HTML (使用scope中的变量)
"
" +

" {{name}}: " +
" Save" +
"
",

replace: true, // 使用模板替换原始标记
transclude: false, // 不复制原始HTML内容
controller: [ "$scope", function ($scope) { … }],
link: function (scope, element, attrs, controller) {…}
}
});
复制代码
效果如下:
image
注意这个自定义指令遵循一种格式:以"my" 为前缀,类似于命名空间,因此如果你在应用中引用了多个模块指令,你可以通过前缀很容易的判断出它是在哪定义的。这不是硬性要求,但是这样做可以带来很多便利。
指令的构造函数会返回带有属性的JavaScript. 对象。这些内容在AngularJS 主页中都有清晰说明。以下是我对一些属性的理解:
restrict: 说明指令在HTML中的应用形式,备选项有"A"、"E" 和 "C", "M" ,分别代表 attribute、element、class和comment(默认值为"A")。我们将更多的关注attributes-如何创建UI元素。
scope: 创建指令的作用范围,scope在指令中作为属性标签传递。Scope 是创建可以复用指令的必要条件,每个指令(不论是处于嵌套指令的哪一级)都有其唯一的作用域,它不依赖于父scope。scope 对象定义names 和types 变量。上面的例子即创建了3个scope变量。
name: "@" (值传递,单向绑定):
"@"符号表示变量是值传递。指令会检索从父级scope中传递而来字符串中的值。指令可以使用该值但无法修改,是最常用的变量。
amount: "=" (引用,双向绑定)
"="符号表示变量是引用传递。指令检索主Scope中的引用取值。值可以是任意类型的,包括复合对象和数组。指令可以更改父级Scope中的值,所以当指令需要修改父级Scope中的值时我们就需要使用这种类型。
save: "&" (表达式)
“&”符号表示变量是在父级Scope中启作用的表达式。它允许指令实现比修改值更高级的操作。
template: 替代原始模板中的标记的字符串。替换功能将替换所有旧元素为新值。注意template是如何使用Scope中定义的变量的。这允许你无需写任何额外的代码即可创建macro-style. 风格指令。replace: 说明是否替换原始标记中的值或是追加原始标记中的值。默认值是false,这时原始标记将被保留。
transclude: 说明自定义指令是否复制原始标记中的内容。例如,之前展示的“tab”指令设置了transclude 为 true,因为tab 元素包含其他HTML 元素。 "dateInput" 指令则需要在初始化时为空,所以需要设置transclude 为false。
link: 该方法在指令中扮演着重要的角色。它负责执行DOM 操作和注册事件*等。link 方法包含以下参数:
scope: 指令Scope的引用。scope 变量在初始化时是不被定义的,link 方法会注册监视器监视值变化事件。
element: 包含指令的DOM元素的引用, link 方法一般通过jQuery 操作实例(如果没有加载jQuery,还可以使用Angular's jqLite )。
controller: 在有嵌套指令的情况下使用。这个参数作用在于把子指令的引用提供给父指令,允许指令之间进行交互, tab 指令就是使用该参数较典型的例子:http://jsfiddle.net/powertoolsteam/GBE7N/1/
注意,当调用link 方法时, 通过值传递("@")的scope 变量将不会被初始化,它们将会在指令的生命周期中另一个时间点进行初始化,如果你需要监听这个事件,可以使用scope.$watch 方法。

为什么使用AngularJS 指令

使用过 AngularJS 的朋友应该最感兴趣的是它的指令。现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架。
目前有很多JavaScript. 产品提供插件给Web开发人员。例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包。但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript. 模式来写 jQuery 代码来激活插件虽然jQuery 代码写起来十分简单,但是必须和HTML进行同步,这是一个单调乏味且容易出错的过程。
AngularJS主页展示了一个简单的例子,用于实现Bootstrap中的 Tab功能,可以在页面中轻松添加 Tab 功能,并且使用方法和 ul 标签一样简单。HTML代码如下:
复制代码

BootStrap Tab Component

This is the content of the first tab.

This is the content of the second tab.

复制代码
JavaScript代码如下:
复制代码
angular.mole('components', []).
directive('tabs', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
controller: [ "$scope", function($scope) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
}],
template:
'
' +

'
' +

'
'+

'{{pane.title}}' +
'
' +

'
' +

'
' +

'
',

replace: true
};
}).
directive('pane', function() {
return {
require: '^tabs',
restrict: 'E',
transclude: true,
scope: { title: '@' },
link: function(scope, element, attrs, tabsCtrl) {
tabsCtrl.addPane(scope);
},
template:
'
' +

'
',

replace: true
};
})
复制代码
你可以从以下链接查看效果:http://jsfiddle.net/powertoolsteam/GBE7N/1/
image
正如你所见,除了拥有用于实现指令的 和 标签,页面和常规HTML页面没有什么区别。HTML开发人员无需编写任何代码。当然,总需要有第一个吃螃蟹的人,创建指令共享使用,但是目前Tabs指令已经很常见了,可以在任何地方复用(如BootStrap,、jQueryUI、Wijmo, 和一些知名的前端插件集)。
由于指令的易用和易编写,许多用户已经开始使用AngularJS编写指令了。例如, AngularJS 开发组已经基于AngularJS实现了一系列指令-UI Bootstrap 来代替Bootstrap; 知名ComponentOne 控件厂商也在AngularJS 基础上创建了Wijmo ;我们也可以在GitHub上找到一些公共指令资料库:jQueryUI widgets。
拥有了 AngularJS,是不是觉得自己已经站在了巨人的肩膀上了?但是不要高兴的太早,如果已经有了这么多的指令供我们使用,那我们为什么还要学习AngularJS ,为什么还要学习自定义指令呢?
举个简单的例子,也许你有特殊的需求:假设你在一家财务公司工作,你需要创建一张财务表单,它需要以表格的形式展示数据、拥有绑定、编辑、校验并且同步数据更新到服务器的功能。表单插件很常见但是能够满足这些具体需求的不得而知了,所以你必须根据实际业务需求来创建自定义指令。
复制代码

Offshore Investment Summary

customer="currentCustomer"
country="currentCountry">

复制代码
这就是本篇文章的目的,接下来我们会讨论如何创建 AngularJS指令。
创建自定义AngularJS 指令
文章开头的自定义指令十分的简单。它仅仅实现了同步的功能。一般指令是包含更多元素的:
复制代码
//创建指令模块 (或者检索现有模块)
var m = angular.mole("myApp");
// 创建"my-dir"指令
myApp.directive("myDir", function() {
return {
restrict: "E", // 指令是一个元素 (并非属性)
scope: { // 设置指令对于的scope
name: "@", // name 值传递 (字符串,单向绑定)
amount: "=", // amount 引用传递(双向绑定)
save: "&" // 保存操作
},
template: // 替换HTML (使用scope中的变量)
"
" +

" {{name}}: " +
" Save" +
"
",

replace: true, // 使用模板替换原始标记
transclude: false, // 不复制原始HTML内容
controller: [ "$scope", function ($scope) { … }],
link: function (scope, element, attrs, controller) {…}
}
});
复制代码
效果如下:
image
注意这个自定义指令遵循一种格式:以"my" 为前缀,类似于命名空间,因此如果你在应用中引用了多个模块指令,你可以通过前缀很容易的判断出它是在哪定义的。这不是硬性要求,但是这样做可以带来很多便利。
指令的构造函数会返回带有属性的JavaScript. 对象。这些内容在AngularJS 主页中都有清晰说明。以下是我对一些属性的理解:
restrict: 说明指令在HTML中的应用形式,备选项有"A"、"E" 和 "C", "M" ,分别代表 attribute、element、class和comment(默认值为"A")。我们将更多的关注attributes-如何创建UI元素。
scope: 创建指令的作用范围,scope在指令中作为属性标签传递。Scope 是创建可以复用指令的必要条件,每个指令(不论是处于嵌套指令的哪一级)都有其唯一的作用域,它不依赖于父scope。scope 对象定义names 和types 变量。上面的例子即创建了3个scope变量。
name: "@" (值传递,单向绑定):
"@"符号表示变量是值传递。指令会检索从父级scope中传递而来字符串中的值。指令可以使用该值但无法修改,是最常用的变量。
amount: "=" (引用,双向绑定)
"="符号表示变量是引用传递。指令检索主Scope中的引用取值。值可以是任意类型的,包括复合对象和数组。指令可以更改父级Scope中的值,所以当指令需要修改父级Scope中的值时我们就需要使用这种类型。
save: "&" (表达式)
“&”符号表示变量是在父级Scope中启作用的表达式。它允许指令实现比修改值更高级的操作。
template: 替代原始模板中的标记的字符串。替换功能将替换所有旧元素为新值。注意template是如何使用Scope中定义的变量的。这允许你无需写任何额外的代码即可创建macro-style. 风格指令。replace: 说明是否替换原始标记中的值或是追加原始标记中的值。默认值是false,这时原始标记将被保留。
transclude: 说明自定义指令是否复制原始标记中的内容。例如,之前展示的“tab”指令设置了transclude 为 true,因为tab 元素包含其他HTML 元素。 "dateInput" 指令则需要在初始化时为空,所以需要设置transclude 为false。
link: 该方法在指令中扮演着重要的角色。它负责执行DOM 操作和注册事件*等。link 方法包含以下参数:
scope: 指令Scope的引用。scope 变量在初始化时是不被定义的,link 方法会注册监视器监视值变化事件。
element: 包含指令的DOM元素的引用, link 方法一般通过jQuery 操作实例(如果没有加载jQuery,还可以使用Angular's jqLite )。
controller: 在有嵌套指令的情况下使用。这个参数作用在于把子指令的引用提供给父指令,允许指令之间进行交互, tab 指令就是使用该参数较典型的例子:http://jsfiddle.net/powertoolsteam/GBE7N/1/
注意,当调用link 方法时, 通过值传递("@")的scope 变量将不会被初始化,它们将会在指令的生命周期中另一个时间点进行初始化,如果你需要监听这个事件,可以使用scope.$watch 方法。

angularjs怎么定义自定义指令

directive()接受两个参数
name:字符串,指令的名字
factory_function:函数,指令的行为
应用启动时,以name作为该应用的标识注册factory_function返回的对象。
在factory_function中,我们可以设置一些选项来改变指令的行为。

下面记录一下定义指令时用到的选项

restrict (string)
该属性用于定义指令以什么形式被使用,这是一个可选参数,本文开头定义的指令用的也是A,其实该选项默认为A。
也就是元素(E)、属性(A)、类(C)、注释(M)
(ps:EMAC? EMACS? 挺好记哈)
比如上面定义的myDirective,可以以任何形式调用。
E(元素)
<my-directive></my-directive>

A(属性,默认值)
<div my-directive="expression"></div>

C(类名)

angularjs怎么定义自定义指令

directive()接受两个参数
name:字符串,指令的名字
factory_function:函数,指令的行为
应用启动时,以name作为该应用的标识注册factory_function返回的对象。
在factory_function中,我们可以设置一些选项来改变指令的行为。

下面记录一下定义指令时用到的选项

restrict (string)
该属性用于定义指令以什么形式被使用,这是一个可选参数,本文开头定义的指令用的也是A,其实该选项默认为A。
也就是元素(E)、属性(A)、类(C)、注释(M)
(ps:EMAC? EMACS? 挺好记哈)
比如上面定义的myDirective,可以以任何形式调用。
E(元素)
<my-directive></my-directive>

A(属性,默认值)
<div my-directive="expression"></div>

C(类名)

软文情感网还为您提供以下相关内容希望对您有帮助:

angular具有的指令类型

Angular具有的指令类型主要分为四种,分别是组件指令、属性指令、结构指令和装饰器指令。1. 组件指令(Component Directives):这是Angular中最重要且最常见的指令类型。组件是Angular应用的基本构建块,它们通常包含模板、样式以及...

angular编程的一些基础知识都有哪些?

angularjs其自身封装了一些常用的系统指令,我们也可以根据需要自定义指令 二、自定义指令简介 自定义指令的基本格式 app.directive("指令名称",function(){ restrict:'指令匹配格式',replace:true,是否自定义元素替代指令申明 ...

angular内置指令 ng-disabled

&lt;textarea ng-disabled="isDisabled"&gt;Wait5seconds&lt;/textarea&gt; angular.module('myApp', []).run(function($rootScope, $timeout) { rootScope.isDisabled = true;timeout(function() { rootScope.isDisabled = false;}...

angular具有的指令类型不包括

angular具有的指令类型不包括“组件指令”。首先需要解释Angular中的指令是什么。在Angular框架中,指令是一种特殊的标记,它可以附着在DOM元素上,用来改变元素的行为、外观或者值。例如,内置的ngStyle指令可以用来动态设置元素的...

angular中使用指令directives

一、Directive的定义及其使用方法 AngularJs的指令定义大致如下 angular.module("app",[]).directive("directiveName",function(){ return{ //通过设置项来定义 };})Directive可以放置于元素名、属性、class、注释中。下面是...

AngularJS中directive指令使用之事件绑定与指令交互用法示例

AngularJS中模板的使用,事件绑定以及指令与指令之间的交互 &lt;!doctype html&gt; &lt;who&gt;&lt;/who&gt; &lt;theshield reigns&gt;343&lt;/theshield&gt; &lt;theshield reigns&gt;fdhg&lt;/theshield&gt; &lt;theshield rollins&gt;hhh&lt;/theshield&gt;...

AngularJS实现元素显示和隐藏的几个案例_AngularJS

与Angualr中其他功能一样,Angular是通过修改数据模型的方式来驱动UI刷新,然后通过指令把变更反应到UI上。ng-show和ng-hide这两条指令的功能是等价的,但是运行效果正好相反,我们都可以根据所传递的表达式来显示或隐藏元素。也...

angularjs有多少种指令

控制器定义有两个参数, 第一个是控制器名称(字符串), 第二个是一个函数或者数组, 当为函数时, 表示控制器的构造函数, , 当为数组时, 数组前面的元素为构造函数用到的字符串形式的服务, 数组最后一个元素为构造函数,...

为什么使用AngularJS 指令

使用过 AngularJS 的朋友应该最感兴趣的是它的指令。现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架。 目前有很多JavaScript. 产品提供插件给Web开发人员。例如, Bootstrap...

angularjs 自定义指令控制input只能输入数字和字母

JavaScript 编写的库。它可通过 标签添加到 HTML 页面。AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。AngularJS 是以一个 JavaScript 文件形式发布的,可通过 script 标签添加到网页中。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文

  • 读《杜工部集》二首的全文 读《杜工部集》二首的全文是什么

    《读《杜工部集》二首》贯休全文:造化拾无遗,唯应杜甫诗。岂非玄域橐,夺得古人旗。日月精华薄,山川气概卑。古今吟不尽,惆怅不同时。甫也道亦丧,孤身出蜀城。彩毫终不撅,白雪更能轻。命薄相如命,名齐李白名。不知耒阳令,何以葬先生。

  • 读《杜工部集》二首的全文是什么

    《读《杜工部集》二首》贯休全文:造化拾无遗,唯应杜甫诗。岂非玄域橐,夺得古人旗。日月精华薄,山川气概卑。古今吟不尽,惆怅不同时。甫也道亦丧,孤身出蜀城。彩毫终不撅,白雪更能轻。命薄相如命,名齐李白名。不知耒阳令,何以葬先生。

  • 读《杜工部集》二首的全文

    《读《杜工部集》二首》贯休全文:造化拾无遗,唯应杜甫诗。岂非玄域橐,夺得古人旗。日月精华薄,山川气概卑。古今吟不尽,惆怅不同时。甫也道亦丧,孤身出蜀城。彩毫终不撅,白雪更能轻。命薄相如命,名齐李白名。不知耒阳令,何以葬先生。

  • 读《杜工部集》二首全文

    《读《杜工部集》二首》贯休全文:造化拾无遗,唯应杜甫诗。岂非玄域橐,夺得古人旗。日月精华薄,山川气概卑。古今吟不尽,惆怅不同时。甫也道亦丧,孤身出蜀城。彩毫终不撅,白雪更能轻。命薄相如命,名齐李白名。不知耒阳令,何以葬先生。

  • 读《杜工部集》二首的朝代是什么

    《读《杜工部集》二首》贯休朝代:唐代

Top