`

AngularJS中使用指令修改DOM

阅读更多

        指令扩展了HTML语法,同时它也是使用自定义的元素和属性把行为和DOM转换关联到一起的方式。通过这些指令,你可以创建可复用的UI组件,配置你的应用,并且可以做到你能想象到的几乎所有事情,这些事情都可以在你的UI模板中实现。

        当你想要以某种方式处理浏览器时间或者修改DOM,而这些东西又没有内置指令可以支持时,你就会知道是时候深入理解指令体系了。

        与服务一样,可以通过模块对象的API来定义指令,只要调用模块实例的directive()函数即可,其中directiveFunction是一个工厂函数,用来定义指令的特性。

var appModule  = angular.module('appModule', [...]);
appModule.directive('directiveName', directiveFunction);

        HTML5中带有一个很棒的新属性,叫做autofocus,它可以把键盘的焦点定位到一个输入元素中。通过它,用户能够立即通过键盘和元素进行交互,而不必先点击元素。这一点很棒,因为它让你可以通过声明的方式来描述需要浏览器做什么,而没有必要编写任何JavaScript代码。但是,如果你想把焦点放到一些非交互型元素上,例如超链接或者div,应该怎么做呢?如果你想让这种机制在不支持HTML5的浏览器中也能工作,又应该怎么做呢?我们可以通过一个指令来实现。

FocusDirective.js

var appModule = angular.module('app',[]);
appModule.directive('ngbkFocus', function() {
    return {
        link: function(scope,element,attrs,controller) {
            element[0].focus();
        }
    };
});

        在上面代码中,我们返回了指令的配置对象,其中带有特定的link函数。link函数会获取外层scope的引用、它所存在的DOM元素、传递给指令的一个属性数组,以及DOM元素上的控制器——如果有控制器存在话。这里,我们只需要获取元素,然后调用它的focus()方法即可。

        然后我们就可以把它用到如下例子中:

<html ng-app='app'>
<head>
	<title>指令实例</title>
</head>
<body ng-controller='SomeController'>
	<button ng-click="clickUnfocused()">
		Not focused
	</button>
	<button ngbk-focus ng-click="clickFocused()">
		I'm very focused!
	</button>
	<div>{{message.text}}</div>
	<script src="lib/angular/angular.js"></script>
	<script src="directive/FocusDirective.js"></script>
	<script>
		appModule.controller('SomeController', function($scope) {
			$scope.message = {text:'nothing clicked yet'};
			$scope.clickUnfocused = function() {
				$scope.message.text = 'unfocused button clicked';
			};
			$scope.clickFocused = function() {
				$scope.message.text  = 'focus button clicked';
			};
		});
	</script>
</body>
</html>

运行结果:

 

资料来源:《用AngularJS开发下一代Web应用》

  • 大小: 13.4 KB
分享到:
评论

相关推荐

    AngularJS创建自定义指令的方法详解

    链接函数负责将指令的行为添加到DOM中。 3. **使用指令**:在HTML中通过元素、属性或注释的方式使用定义好的指令。 ### 实现自定义指令的方法 实现自定义指令涉及到编写JavaScript代码,可以通过以下几种方式实现:...

    AngularJS 中文API参考手册

    3. 使用指令封装可复用的DOM操作,避免直接操作DOM。 4. 利用路由进行页面导航,确保应用状态的清晰。 5. 使用AngularJS提供的验证机制(ng-pattern、ng-minlength等)进行客户端验证,提高用户体验。 这个...

    AngularJS 中文API参考手册.chm

    它们可以在表达式中使用,也可以结合管道符号(|)应用于视图中。 **7. 数据绑定语法**:AngularJS提供了多种数据绑定语法,如`{{ expression }}`用于显示模型数据,`ng-bind`指令用于将HTML元素的文本内容与模型...

    shadowDirective:创建AngularJS指令,该指令将在shadow dom内以实现kickass模块化

    在AngularJS中,`shadowDirective`是一个自定义指令,它利用了Web Components的Shadow DOM特性来实现更强大的模块化和封装。Shadow DOM是现代Web开发中的一个重要概念,它允许我们在Web组件内部创建独立的DOM结构,...

    AngularJS中的指令实践开发指南(二)

    在这个函数中,可以使用jQuery或其他DOM操作库来直接修改DOM,也可以通过作用域引用(如scope.$apply)来更新父作用域中的数据。 在代码示例中,我们看到helloWorld指令是通过隔离作用域定义的,但在隔离作用域内...

    AngularJS 学习资料

    - **指令**:AngularJS中的指令是DOM元素上的标记,用于扩展HTML的表达能力。它们可以是自定义属性、类名甚至是新的元素。指令可以帮助开发者更方便地操作DOM。 - **模板**:AngularJS支持动态加载模板,这意味着...

    Angularjs(增删改+分页+弹框+Sql数据库)

    1. **HTML模板文件**:包含AngularJS指令和数据绑定,用于构建用户界面。 2. **JS控制器文件**:定义AngularJS的控制器,负责处理用户交互和业务逻辑。 3. **服务文件**:可能包含自定义服务,用于与后端API通信,...

    AngularJS对动态增加的DOM实现ng-keyup事件示例

    在本文中,我们将深入探讨如何使用AngularJS动态增加DOM元素并实现`ng-keyup`事件。这个示例展示了如何在用户交互中动态地将非输入元素(如`&lt;p&gt;`或`&lt;div&gt;`)转化为输入框(`&lt;input&gt;`),并在用户输入内容后通过回车键...

    浅谈AngularJs指令之scope属性详解

    本文将深入探讨AngularJs指令中的scope属性,这是一个非常重要的特性,因为它决定了指令如何与数据模型进行交互。 首先,AngularJs中的指令是通过调用模块的.directive()方法创建的。该方法的主体框架接受两个参数...

    Angularjs标签模板加载原理

    编译阶段,AngularJS遍历DOM,识别并处理所有的AngularJS指令,将它们转换为可执行的函数。链接阶段,AngularJS将编译后的节点与作用域(Scope)关联起来,使指令能够访问和修改模型数据。 总结,AngularJS标签模板...

    精通AngularJS part1

    85使用指令修改按钮样式219 编写一个按钮指令220 86理解AngularJS的组件指令222 编写一个分页指令222 为分页指令编写单元测试代码223 在指令中使用HTML模板224 从父作用域中隔离指令225 使用@插入属性226 ...

    AngularJS 中文API参考手册.zip

    6. **表达式(Expressions)**:在AngularJS中,可以在HTML中使用{{}}包裹的JavaScript表达式,它们会被解析为模型中的值。 7. **服务(Services)**:可重用的代码块,例如$http用于HTTP请求,$scope用于封装控制...

    JS AngularJS 学习笔记

    AngularJS的数据绑定使用`{{ }}`插值表达式,将JavaScript表达式的结果插入到HTML中,实现数据的动态渲染。 **2. MVC架构** AngularJS中的MVC架构将应用程序分为三个主要部分:模型(Model)、视图(View)和控制...

    AngularJS实现自定义指令与控制器数据交互的方法示例

    同时,对于AngularJS的深入学习,推荐参考相关专题,如《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》,这些内容能够帮助开发者系统地掌握AngularJS的高级用法,提升开发...

    AngularJs:动态添加,删除指令并保存详细信息

    AngularJS中的指令是用于扩展HTML的一种方式,它们允许我们定义新的行为或修改已有元素的行为。要动态添加指令,首先需要创建一个自定义指令。例如,我们可以创建一个名为`myDirective`的指令,然后在运行时根据需要...

    AngularJS Eclipse 1.2.0 插件下载

    3. **模板语法验证**:AngularJS的HTML模板中使用了大量的指令和表达式,插件可以对这些模板进行语法检查,确保模板的正确性。 4. **调试支持**:插件允许开发者在Eclipse中设置断点,进行单步调试,查看变量值,...

    详解Angularjs 自定义指令中的数据绑定

    - 避免在指令中直接修改DOM元素的属性或样式,以免破坏Angularjs的数据绑定机制,应该使用Angularjs提供的API来操作DOM。 - 调用父级控制器中的函数时,要保证传入的函数引用是有效的,特别是当指令被重复使用时,...

    AngularJS1.x快速入门

    - **AngularJS实现**:使用`ng-model`指令和表达式计算金额。 ```html ;count=1"&gt; 小计金额:{{price * count}} ``` #### 四、AngularJS扩展HTML - **ng-app**:作为AngularJS应用的入口,标记此元素及其...

    AngularJs 60分钟入门基础教程

    这些自定义标签在AngularJs中会被解析,并且动态地修改DOM。在入门阶段,你可以暂时将Directive理解为用来增强HTML的标签。 AngularJs中的Data Binding是将模型(Model)和视图(View)进行双向绑定的一种机制。...

Global site tag (gtag.js) - Google Analytics