学习AngularJs:Directive指令用法(完整版)
|
tip:当你想要创建一个可重用的组件时隔离作用域是一个很好的选择,通过隔离作用域我们确保指令是‘独立'的,并可以轻松地插入到任何HTML app中,并且这种做法防止了父作用域被污染; @ 绑定一个局部 scope 属性到当前 dom 节点的属性值。结果总是一个字符串,因为 dom 属性是字符串。 @ 局部 scope 属性 @ 方式局部属性用来访问 directive 外部环境定义的字符串值,主要是通过 directive 所在的标签属性绑定外部字符串值。这种绑定是单向的,即父 scope 的绑定变化,directive 中的 scope 的属性会同步变化,而隔离 scope 中的绑定变化,父 scope 是不知道的。 如下示例:directive 声明未隔离 scope 类型,并且使用@绑定 name 属性,在 directive 中使用 name 属性绑定父 scope 中的属性。当改变父 scope 中属性的值的时候,directive 会同步更新值,当改变 directive 的 scope 的属性值时,父 scope 无法同步更新值。 js 代码:
lt;!DOCTYPE htmlgt;
lt;html lang="zh" ng-app="myApp"gt;
lt;headgt;
lt;meta charset="UTF-8"gt;
lt;titlegt;AngularJS入门学习lt;/titlegt;
lt;script type="text/javascript" src="./1.5.3/angular.min.js"gt;lt;/scriptgt;
lt;/headgt;
lt;bodygt;
lt;div ng-controller="myController"gt;
lt;div class="result"gt;
lt;divgt;父scope:
lt;divgt;Say:{{name}}lt;brgt;改变父scope的name:lt;input type="text" value="" ng-model="name"/gt;lt;/divgt;
lt;/divgt;
lt;divgt;隔离scope:
lt;div isolated-directive name="{{name}}"gt;lt;/divgt;
lt;/divgt;
lt;divgt;隔离scope(不使用父scope {{name}}):
lt;div isolated-directive name="name"gt;lt;/divgt;
lt;/divgt;
lt;/divgt;
lt;/bodygt;
lt;script type="text/javascript"gt;
var app = angular.module('myApp', []);
app.controller("myController", function ($scope) {
$scope.name = "hello world";
}).directive("isolatedDirective", function () {
return {
scope: {
name: "@"
},
template: 'Say:{{name}} lt;brgt;改变隔离scope的name:lt;input type="buttom" value="" ng-model="name" class="ng-pristine ng-valid"gt;'
};
});
lt;/scriptgt;
lt;/htmlgt;
结果:页面初始效果
动画效果:
可以看到父scope上的内容发生改变,子scope同时发生改变。而子scope上的内容发生改变。不影响父scope上的内容! = 局部 scope 属性 = 通过 directive 的 attr 属性的值在局部 scope 的属性和父 scope 属性名之间建立双向绑定。 示例代码:
lt;!DOCTYPE htmlgt;
lt;html lang="zh" ng-app="myApp"gt;
lt;headgt;
lt;meta charset="UTF-8"gt;
lt;titlegt;AngularJS入门学习lt;/titlegt;
lt;script type="text/javascript" src="./1.5.3/angular.min.js"gt;lt;/scriptgt;
lt;/headgt;
lt;bodygt;
lt;div ng-controller="myController"gt;
lt;divgt;父scope:
lt;divgt;Say:{{user.name}}lt;brgt;改变父scope的name:lt;input type="text" value="" ng-model="userBase.name"/gt;lt;/divgt;
lt;/divgt;
lt;divgt;隔离scope:
lt;div isolated-directive user="userBase"gt;lt;/divgt;
lt;/divgt;
lt;/divgt;
lt;/bodygt;
lt;script type="text/javascript"gt;
var app = angular.module('myApp', []);
app.controller("myController", function ($scope) {
$scope.userBase = {
name: 'hello',
id: 1
};
}).directive("isolatedDirective", function () {
return {
scope: {
user: "="
},
template: 'Say:{{user.name}} lt;brgt;改变隔离scope的name:lt;input type="buttom" value="" ng-model="user.name"/gt;'
}
})
lt;/scriptgt;
lt;/htmlgt;
效果:
可以看到父scope和子scope上的内容一直都是一样的! (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 事实证明要想获Win10管理员权限只需接入雷蛇鼠标 执行远程操
- 2月份GitHub上最热门的Java开源项目
- Windows 10 20H1新版18922发布:左下角搜索与小娜实现分离
- Chrome for Windows 10 ARM已经被独立开发人员成功编译出来
- 解惑IIS没法添加映射之谜
- 什么是Windows 7 N / KN / VL版本?
- 微软宣布为美国政府延长Windows 7安全支持期限:因为这事
- windows – 如何从Cygwin SSH会话运行PowerShell脚本?
- IIS 8中“连接”面板中的“创建新连接”按钮在哪里?
- IE正在退出!Windows 10开始弹窗 请用户切换到Edge




