这一节我们来说一下controller这个参数

一.指令控制器的配置方法:

对于指令我有两种配置路由的方式:1.在html中直接引用,2,在指令的controller参数里定义

第一种:在html中直接引用

我定义一个controller:其中newsApp为我自定义的app模块。

js:controller

  1. var newsApp=angular.module('newsApp',{});
    newsApp.controller('ForDirective', function() {
  2. alert("this is a directive controller");
  3. });

js:directive

  1. newsApp.directive('helloDirective', function() {
  2. return {
  3.  
  4. }
  5. });

html

  1. <section>
  2. <div hello-directive ng-controller="ForDirective"></div>
  3. </section>

这种方式大家都很熟悉

第二种:在指令的controller参数里定义

可取值:string或者function

该controller可以是已经定义在app上的一个controller,比如:{controller:'ForDirective'}

也可以是匿名函数,及:{controller:function(){}}

该controller是对所有其他指令共享的,自定义的其他指定均可以调用其中的一些方法

还是刚刚的例子,我切换为在指令里设置controller

js:directive

  1. newsApp.directive('helloDirective', function() {
  2. return {
  3. controller:'ForDirective'
  4. }
  5. });

或者:

  1. newsApp.directive('helloDirective', function() {
  2. return {
  3. controller: function() {
  4. alert("this is a directive controller");
  5. }
  6. }
  7. });

html:

  1. <section>
  2. <div hello-directive></div>
  3. </section>

二.指令控制器的常用依赖服务

指令控制器,可以注入任意可以被注入的ng服务。我们介绍一些服务来了解下他们的作用

  1.$scope

    指令当前作用域

  2.$attrs

    指令作用Dom元素的属性集合对象

    这个属性集其实就是把元素的属性和值封装为一个json对象:{id:'obj',name:'myname'}

  3.$element

    指定作用的Dom元素

    可以理解为jquery里面的$('#id')

  4.$transclude

    在使用该嵌入链接函数时,一定要先将transclude参数设置为true,不然$transclude会为undefind

    我们看一个例子:

js:directive

  1. newsApp.directive('helloDirective', function() {
  2. return {
  3. transclude: true,
  4. controller: function($element, $transclude) {
  5. $transclude(function(clone) {
  6. $element.append(clone);
  7. });
  8. }
  9. }
  10. });

html

  1. <section>
  2. <div hello-directive>
  3. 这是原先的内容
  4. </div>
  5. </section>

运行效果:

查看源码:

我们没有在指令模板里加入带 ng-transclude的元素,但是 原先的内容依旧输出,

我们来分析一下:

首先,参数transclude:true,就是告知要嵌入以前的内容,这样 指令作用的dom元素就被clone了一份保留下来,保留在$transclude的回掉函数的参数clone里面,clone这个实体就是被保留的元素。

我们在controller里面又将其添加到页面中,于是实现了那种效果

对$scope,$element,$attrs,$transclude的综合应用能使我们自定义指令做成很方便我们使用的组件

angularjs指令系统系列课程(5):控制器controller的更多相关文章

  1. angularjs指令系统系列课程(1):目录

    angularjs里面有一套十分强大的指令系统 比如内置指令:ng-app,ng-model,ng-repeat,ng-init,ng-bind等等 从现在开始我们讲解AngularJS自定义指令, ...

  2. angularjs指令系统系列课程(4):作用域Scope

    指令的scope对象是一个很重要,很复杂的对象,我们这一节作为重点讲解 可取值: 1.false(默认), 2.true, 3.{}(object) 1.false:默认值,不创建新的作用域 2.tr ...

  3. angularjs指令系统系列课程(3):替换replace,内容保留transclude,作用方式restrict

    这一节我们主要看一下replace,transclude,restrict这三个参数 1.replace 可取值:bool 默认为:true 对于replace属性,设置为false表示原有指令标识不 ...

  4. angularjs指令系统系列课程(2):优先级priority,模板template,模板页templateUrl

    今天我们先对 priority,template,templateUrl进行学习 1.priority 可取值:int 作用:优先级 一般priority默认为0,数值越大,优先级越高.当一个dom元 ...

  5. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  6. AngularJS进阶(九)控制器controller之间如何通信

    AngularJS控制器controller之间如何通信 注:请点击此处进行充电! angular控制器通信的方式有三种: 1,利用作用域继承的方式.即子控制器继承父控制器中的内容 2,基于事件的方式 ...

  7. Angularjs 控制器controller的作用

    我们在view中给模型的一个参数name赋值 “hello world” . 这是一种简单的赋值,我们可以在视图中通过 ng 指令(以ng-开头的指令)实现了简单的赋值,如果遇到复杂的逻辑运算操作,那 ...

  8. ASP.NET MVC框架开发系列课程 (webcast视频下载)

    课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...

  9. AngularJS路由系列(2)--刷新、查看路由,路由事件和URL格式,获取路由参数,路由的Resolve

    本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● 刷新路由● 查看当前路由以及所有路由● 路由触发事件● 获取路由参数 ● 路由的resolve属性● 路由URL格式 ...

随机推荐

  1. 关于baseflight cleanflight naze32不能解锁的办法

    需要修改源代码,重新编译.. mcfg.mincheck = 1150; mcfg.maxcheck = 1850; 当然,这是笨方法.还有个办法设置解锁检查的最大最小油门 在控制台,也就是 CLI那 ...

  2. Java操作Excel: POI不能创建xlsm问题的方法(源自StackOverFlow)

    write to xlsm (Excel 2007) using apache poi POI的下载(记得把其中的jar包全部加到工程里哦)http://mirror.bit.edu.cn/apach ...

  3. UVALive 7148 LRIP(树的分治+STL)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  4. 使用百度地图api接口获取公交地图路线和车站

    需要在页面文件中引用百度的js @*<script type="text/javascript" src="http://api.map.baidu.com/api ...

  5. vbs 中文字符串

    vbs 字符串包含中文字符,文件以UTF-8无BOM格式保存,就会出现“编译器错误: 未结束的字符串常量”错误,改以ANSI保存就没有这个问题

  6. 记一次 IDEA mybatis.generator 自定义扩展插件

    在使用 idea mybatis.generator 生成的代码,遇到 生成的代码很多重复的地方, 虽然代码是生成的,我们也不应该允许重复的代码出现,因为这些代码后期都要来手动维护. 对于生成时间戳注 ...

  7. YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)

    程序=数据结构+算法,而企业级的软件=数据+流程,流程往往千差万别,客户自身有时都搞不清楚,随时变化的情况更是家常便饭,抛开功能等不谈,需求变化很大程度上就是流程的变化,流程的变化会给开发工作造成很大 ...

  8. session原理及实现共享

    一.session的本质http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你.那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱 ...

  9. wireshark常用过滤条件

    抓取指定IP地址的数据流: 如果你的抓包环境下有很多主机正在通讯,可以考虑使用所观察主机的IP地址来进行过滤.以下为IP地址抓包过滤示例: host 10.3.1.1:抓取发到/来自10.3.1.1的 ...

  10. JMeter入门使用指南

    初识JMeter 最近开始接触和使用JMeter进行性能测试,也是因为工作需要,不得不学习更多新技能,在此之前一直使用LR进行WEB系统的压力测试,但是在ZK开发的WEB系统,我选择使用JMeter. ...