前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容。 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签。...拼写正确后,网友发现报错,无法正常工作。这是因为模板中存在单标签,导致模板无法正确解析~ 再次感谢博友们提出的错误! 独立作用域的作用 为了便于理解,先看一下下面这个例子: <!...分析: 当我们自己创建某个指令时,这个指令肯定不可能只使用一次,是要重复多次使用的,有的在一个页面内或者一个控制器内需要使用多次。 ...作用域数据绑定 自定义标签或者进行扩展时,会有这样的需求场景,要在标签中添加一些属性,实现一些复杂功能。 关于这些属性,独立作用域是如何的做的呢?看看下面的内容吧。 ...在指令的定义中,添加了scope:{say:'@'}这个键值对属性,也就是说,angular会识别say所绑定的东西是一个字符串。 在模板中,使用表达式{{say}}输出say所表示的内容。
,来代替定义指令 这个函数称为 连接传递函数 postLink 简单指令用的比较多 }; }); 注意事项:自己定义的指令一般 有 my作为前缀,或者用项目名也比较合适,不要使用ng开头,避免冲突... +的形式 由于多行维护和阅读都非常的困难,所以这个方案不被大量使用,简单的时候就这样用,但是复制的情况下建议使用 templateUrl 这里面的难点在于 模板 中作用域的问题 templateUrl...true 默认是false 或者设置为一个对象 作用:当设置为true时候,会从父作用域继承并创建一个新的作用域 新的作用域代表了什么意思,代表了它是独立的 关于这点 下篇文章详细讲解 transclude...另外一个 指令中 实现的目的就是:指令的内部可以访问外部指令的作用域 这个时候有个前提条件就是:scope选项必须是通过{}或者true设置成隔离作用域(独立作用域) controller:String...作用是:将一些特殊的服务注入到本指令中 函数: function(scope,element,attrs,transclude,otherInjectables) scope:与指令元素相关的当前的作用域
在 HTML 代码中,一旦一个 ng-app 指令被定义,那么一个作用域就产生了,由 ng-app 所生成的作用域比较特殊,它是一个根作用域($rootScope),它是其他所有$Scope 的最顶层。...在生成一个作用域之后,在编写 AngularJS 代码时,$scope 对象就代表了这个作用域的数据实体,我们可以在$scope 内定义各种数据类型,之后可以直接在 HTML 中以 {{变量名}} 方式来让...以下 HTML 中定义了三个作用域,分别是由 ng-app 指令所创建的$rootScope,parentCtrl 和 childCtrl 所创建的子作用域,这其中 childCtrl 生成的作用域又是...因此,如果在定义了孤立作用域的 AngularJS directive 中想要访问其父作用域的属性,则得到的值为 undefined。代码如下: 示例六:独立作用域的隔离性 使用这种绑定方式时,需要在 directive 的 scope 属性中明确指定引用父作用域中的 HTML 字符串属性,否则会抛异常。示例代码如下: 实例七: 单向绑定示例 <!
鼓励开发者尽可能的去使用这个在自定义的注视指令上。 文本和属性的绑定 在编译处理过程中,编译器使用$interpolate服务匹配文本和属性、查看是否包含嵌套的表达式。...同样的,不要给自己的指令使用ng前缀或者你认为未来版本的angular可能会引起冲突的名称。 在下面的例子中,我们将使用前缀my(例如 myCustomer)。...虽然我们定义了vojta在控制器中,但是它在指令中是无效的。...顾名思义,指令的隔离作用域隔离了除模块中明确添加到scope对象的任何东西。这在构建可复用组件时很有用,因为它防止组件在修改你的model状态时只是你明确允许的哪些。...我们看到之前如何使用=attr在scope选项中,但是在上面的例子中,我们使用$attr替代。这种&绑定允许一个指令在特定的时间触发在原始的作用域中的表达式求值。
2-表达式和指令,数据绑定 angular1.x 学习目录 1-angular 学习导航和基础 2-表达式和指令,数据绑定 3-模型和作用域 scope 4-控制器和过滤器 一 表达式 ng-init...创建自己的 指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令。 你可以使用 .directive 函数来添加自定义的指令。...second会在自己的作用域中新建一个name变量,与父级作用域中的 // name相对独立,所以再修改父级中的name对second中的name就不会有影响了 template...$transclude) {}, //作用域 值为{}时创建全新的隔离作用域, 值为string时为控制器名称 restrict: 'AE', // E = Element, A =...值为true时优先级低于此指令的其它指令无效 link:function // 值为函数 用来定义指令行为从传入的参数中获取元素并进行处理 }; }]).directive
ng-init -该指令初始化应用程序数据。 ng-model -此指令定义的模型,该模型是变量在AngularJS使用。 ng-repeat -该指令将重复集合中的每个项目的HTML元素。...2.1.1.1 ng-app属性 ng-app指令: ng-app指令标记了AngularJS脚本的作用域,在中添加ng-app...ng-app指令的HTML标签,该标签即定义了AngularJS应用的作用域。...作为一个命名习惯,AngularJS内建服务,作用域方法,以及一些其他的AngularJS API都在名字前面使用一个‘’前缀。不要使用‘’前缀来命名你自己的服务和模型,否则可能会产生名字冲突。...AngularJS的作用域理论非常重要:一个作用域可以视作模板、模型和控制器协同工作的粘接器。AngularJS使用作用 域,同时还有模板中的信息,数据模型和控制器。
基本概念 1、依赖注入 依赖注入,在angular中到处可见,这里不会照本宣科,只以很直白的方式的简单描述基本使用方式,以$scope注入为例。 ...2、directive 指令系统,我认为是angular1.x版本中最强大也是最复杂的部分,angular作者本身做后端出身,所以在整个指令周期也符合语言处理过程:经过编译(compile函数,会返回...ele,attr){return function(){}}//如果此函数存在,link函数会被忽略,因为compile函数会返回link函数 } } }); 2)关于绑定策略 独立作用域父子作用域之间交换数据的方式...,表示单向绑定 注意:对于&绑定的使用,主要是为了实现子作用域到父作用域的传递,个人比较喜欢vue中父子交互的方式:props in,event out。...4、controller controller可以认为是一个封装程序逻辑的地方,这里和后端mvc中controller的作用类似,拿到modal,渲染模版,在angular中scope是连接controller
注意这个自定义指令遵循一种格式:以"my" 为前缀,类似于命名空间,因此如果你在应用中引用了多个模块指令,你可以通过前缀很容易的判断出它是在哪定义的。这不是硬性要求,但是这样做可以带来很多便利。...scope: 创建指令的作用范围,scope在指令中作为属性标签传递。Scope 是创建可以复用指令的必要条件,每个指令(不论是处于嵌套指令的哪一级)都有其唯一的作用域,它不依赖于父scope。...指令会检索从父级scope中传递而来字符串中的值。指令可以使用该值但无法修改,是最常用的变量。 amount: "=" (引用,双向绑定) "="符号表示变量是引用传递。...指令检索主Scope中的引用取值。值可以是任意类型的,包括复合对象和数组。指令可以更改父级Scope中的值,所以当指令需要修改父级Scope中的值时我们就需要使用这种类型。...好了,以上即为自定义指令需要用到基本知识描述。
如何使用Scope 当你在AngularJS创建控制器时,你可以将$scope对象当做一个参数传递: 实例: 控制器中的属性对应了视图上的属性: ...根作用域 所有的应用都有一个$rootScope,它可以作用在ng-app 指令包含的所有HTML 元素中。 ...$rootScope可作用域整个应用中,是各个controller中scope的桥梁。用rootscope定义的值,可以在各个controller中使用。 ...应用程序在内运行。 ng-controller = "myCtrl" 属性是一个Angular 指令。用于定义一个控制器。 ...控制器在作用域中创建两个属性(firstName 和lastName)。 ng-model 指令绑定输入域到控制器的属性(firstName 和lastName)。
---- 如何使用 Scope 当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递: AngularJS 实例 控制器中的属性对应了视图上的属性: 在以上两个实例中,只有一个作用域 scope,所以处理起来比较简单,但在大型项目中, HTML DOM 中有多个作用域,这时你就需要知道你使用的 scope 对应的作用域是哪一个。...AngularJS 实例 当我们使用 ng-repeat 指令时,每个重复项都访问了当前的重复对象: ...---- 根作用域 所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。 $rootScope 可作用于整个应用中。...是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用。
当浏览器调用的js代码不在angular执行上下文时,意味着angular无法发现模型的修改。要正确的处理模型修改,执行就要在angular执行上下文中使用apply方法。...如果watch修改了模型中的值,将会触发一次 Creation / 创建 根作用域在应用启动的时候由$injector创建,在template linking阶段和指令时将会创建新的子作用域; Watcher...作用域和指令: 在编译阶段,编译器从DOM模板中匹配指令,指令通常分为两类: 观察指令,例如双大括号表达式,注册监听器使用$watch方法。这种类型的指令在表达式发生变化的时候会被通知用来更新视图。...作用域和控制器: 作用域和控制器在下面的情况下相互作用: 控制器使用作用域暴露方法给模板 控制器定义方法可以改变模型 控制器可以注册监视器到模型,在控制器的行为执行后立即执行。...一个显式的调用只有在实现自定义事件的会调用使用,或在工作在第三方的库的回调中。 进入Angular执行上下文通过调用scope.
angular中关于源码的理解可按下图来进行学习,这里只总结几个比较重要的特性实现。 $compile 在angular中,指令的编译链接、双向数据绑定、各种监听等都是通过$compile来完成的。...这会轮流调用每一个指令的链接函数,让每一个指令都能对DOM注册监听事件,和建立对作用域的的监听。这样最后就形成了作用域的DOM的动态绑定。任何一个作用域的改变都会在DOM上体现出来。...更多可以参考[译]ng指令中的compile与link函数解析 $digest $watch存储了监听函数,当作用域里的变量发生变化时,调用$digest方法便会执行该作用域以及它的所有子作用域上的相关的监听函数...,这个在创建指令并且scope属性定义的情况下,会触发这种情况,还有几种别的特殊情况,如果是独立作用域的话,会多一个$root属性,这个默认是指向rootscope的 如果不是独立的作用域,则会生成一个内部的构造函数...angular适合构建CRUD应用,因为它具有构建一个CRUD应用时可能用到的所有技术:数据绑定、基本模板指令、表单验证、路由、深度链接、组件重用、依赖注入。
Angular Directive 学习 学习目的:为了更好的了解 ng directive 的使用方法。 Directive可能是AngularJS中比较复杂的一个东西了。一般我们将其理解成指令。...当有多个directive定义在同一个DOM元素上时,有时需要明确他们的执行顺序。这个属性用于在directive的compile function调用之前进行排序。...新的作用域规则不适用于根模版,因为根模版往往会获得一个新的scope。 {} 将创建一个新的、独立的scope,此scope与一般的scope的区别在于它不是通过原型继承于父scope的。...(为true时,模版必须有一个根节点) transclude 编译元素的内容,使它能够被directive使用。需要在模版中配合ngTransclude使用。...这个属性仅仅是在compile属性没有定义的情况下使用。 关于scope 这里关于directive的scope为一个object时,有更多的内容非常有必要说明一下。
$compile 在angular中,指令的编译链接、双向数据绑定、各种监听等都是通过$compile来完成的。...这会轮流调用每一个指令的链接函数,让每一个指令都能对DOM注册监听事件,和建立对作用域的的监听。这样最后就形成了作用域的DOM的动态绑定。任何一个作用域的改变都会在DOM上体现出来。...更多可以参考[译]ng指令中的compile与link函数解析 $digest $watch存储了监听函数,当作用域里的变量发生变化时,调用$digest方法便会执行该作用域以及它的所有子作用域上的相关的监听函数...,这个在创建指令并且scope属性定义的情况下,会触发这种情况,还有几种别的特殊情况,如果是独立作用域的话,会多一个$root属性,这个默认是指向rootscope的 如果不是独立的作用域,则会生成一个内部的构造函数...angular适合构建CRUD应用,因为它具有构建一个CRUD应用时可能用到的所有技术:数据绑定、基本模板指令、表单验证、路由、深度链接、组件重用、依赖注入。
(filter)、服务和自定义服务(provider, factory,service)、指令和自定义指令(directive)、依赖注入(DI)、Angular继承。...AngularJS将会遍历DOM模板, 来生成相应的NG指令,所有的指令都负责针对view(即HTML中的ng-model)来设置数据绑定。 在HTML中: ? 在JS中: ?...当你想要创建一个可重用的组件时隔离作用域是一个很好的选择,通过隔离作用域我们确保指令是‘独立’的,并可以轻松地插入到任何HTML app中,并且这种做法防止了父作用域被污染。...1)作用域的原型继承:原型继承时对变量的赋值不会修改原型中的值,而是直接在当前scope中创建一个同名的属性;但如果是变量是对象,则不会创建。即基本类型会重新创建变量,引用则不会。 ?...因此当你需要重用来自父控制器中的功能时,你所要做的就是在父作用域中添加相应的方法。这样一来,自控制器将会通过它的作用域的原型来获取父作用域中的所有方法。 ?
一般而言,使用jQuery的弊病在于, 用作中大型应用jQuery相对简陋,容易执着于DOM操作这种原子类问题。 代码不好模块化,变量,方法处在全局作用域下面容易相互污染。...学习AngularJS 1 AngualrJs则通过数据双向绑定屏蔽了DOM操作,MVC解耦代码,依赖注入,自定义指令来复用代码,然后配合强大的路由,本地化,安全特性等,成功地成为了前ES6时代最流行的前端框架...作用域、数据双向绑定、模块 作用域(scope)是AngualrJs中的基础概念,一般而言,一个controller一个scope , 每个controller中内置一个数据模型对象scope。...必要时候使用指令 directive 指令 directive,以及用指令写组件 指令是Angular中相对低层,却又非常强大的功能。...,算是AngularJS中高阶能够,可以从下面三点简单理解的是: scope字段,设定指令的作用域。
AngularJS指令 通过 指令 来扩展HTML。通过内置的指令来为应用添加功能,可以自定义指令。 指令带有前缀 ng- ng-app指令用来初始化一个 AngularJS应用程序 3.1....创建自定义指令 声明:使用 .directive 函数来添加自定义的指令,声明时使用 驼峰命名法 作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。 4.1....Scope作用范围 根作用域:$rootScope 作用在 ng-app 指令包含的所有HTML元素中 用 $rootScope 定义的值,可以在各个controller中使用 在 service 和 controller 需要时创建。
priority (Number),可选参数(作为了解,使用几率极小)指明指令的优先级,当有多个directive定义在同一个DOM元素时,有时需要明确它们的执行顺序。...另外,测试时有点不小心,在定义directive的时候,两次定义了一个相同名称的directive,但执行结果发现,compile或者link都执行)。...写法二使用到了html中hi2标签的title属性。...scope false(默认值):表示继承父作用域。...true:表示继承父作用域,并创建自己的作用域(子作用域);如果在同一个元素中有多个directive需要新的scope的话,它还是只会创建一个scope。
angularjs有4大特性:MVC、模块化、指令系统、双向数据绑定。在学习过程中也是围绕这几点进行系统的学习。 ... c.数据绑定模块的默认格式为{{参数名称}},当然这个格式是可以自定义设置的 d.第DOM标签添加angular属性时,都是以ng-开始 e.angular框架中数据模型数据的变更会动态的绑定显示到...angular.module('myApp', []); 5、作用域 angular作用域是其最主要核心特征之一,通过$scope来表示。...$scope 对象是定义应用业务逻辑、控制器方法和视图属性的地方。 d.作用域是视图和控制器之间的胶水 e....控制器是可以嵌套的,作用域也是嵌套的 定义使用方式如下: var app = angular.module('模块名称', []); app.controller('控制器名称'
指令的内部可以访问外部指令的作用域,并且模板也可以访问外部的作用域对象。为了将作用域传递进去,scope参数的值必须通过{}或true设置成隔离作用域。...如果没有设置scope参数,那么指令内部的作用域将被设置为传入模板的作用域。 ...同时,{{name}}能够读取到指令外的作用域,即控制器中scope.name的值。 有了上面的铺垫,我们就可以来介绍今天的主题了,先上菜 index.html: 指令直接共享外部控制器的scope,此时directive中的scope就和控制器紧密相关,所以此时,scope.name在指令的link中被重新赋值,这时候控制器和指令中的name都被更新为Jeff...通过这种声明,表明directive有了自己的独立的scope,但是这种scope会在directive实例化的时候将外部控制器中的变量全部复制到自己的scope作用域中。
领取专属 10元无门槛券
手把手带您无忧上云