自定义属性的四种类别
分为: 元素E,属性A,注释M,类C,分别如下:
简单创建一个指令
html结构:
javascript结构:
不同的templateUrl ①
不同的templateUrl ②
输出结果:
Name: Naomi Address: 1600 Amphitheatre
说明: templateUrl 的值可以是一个函数返回值,返回用于指令中的html模板的url。
html结构:
javascript结构:
templateUrl html 结构:
输出结果:
Name: Naomi Address: 1600 Amphitheatre Name: Igor Address: 123 Somewhere
说明: 可见 不同的controller 有不同的作用范围。虽然指令一样,每次渲染都是分离的,所以我们可以抽象出来指令,用于html模板和代码的重用,封装。但是这样又不是很好,因为用了两个controller,我们可以使用指令中的scope而不是controller里的scope来替代,具体做法是将外部的scope 映射到指令内部的scope,如下:
html结构:
javascript 结构:
templateUrl html结构:
编译后的html结果:
Name: Naomi Address: 1600 Amphitheatre Name: Igor Address: 123 Somewhere
html 结构:
javascript结构:
templateUrl html结构:
html编译后的结果:
Name: Naomi Address: 1600 Amphitheatre Name: Address:
说明: vojta 在指令中的scope没有被定义,不会直接继承在controller中的,那么他就是undefined,所以就是空白(什么都不显示)
创建一个用于操作dom的指令,如果需要dom操作也都应该放在指令里。
html 结构:
Current time is:javascript结构:
/* 更新时间<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a> */
function updateTime() {
element.text(dateFilter(new Date(),format));
}
/* 监视时间格式的改变 */
var attrWatch = scope.$watch(attrs.myCurrentTime,function(value) {
format = value;
updateTime();
});
/* 定时器 */
timeoutId = $interval(function() {
updateTime(); // update DOM
},1000);
/* <a href="/tag/yemian/" target="_blank" class="keywords">页面</a><a href="/tag/tiaozhuan/" target="_blank" class="keywords">跳转</a>后移除定时器防止内存泄露 */
element.on('$destroy',function() {
$interval.cancel(timeoutId);
attrWatch(); // 移除watch
});
}
};
});
说明: 在link函数中,操作dom节点,让dom的文本节点动态显示时间跳动。在页面跳转之后及时清除定时器和监视器以免发生内存泄漏。
html结构:
javascript结构:
templateUrl html 结构:
编译后的html结构:
Check out the contents,Tobias!
说明: 指令中的scope本应隔离controller中的作用域的,但是由于设置了transclude=true选项,scope就会继承controller中的定义,所以最终是Tobias而不是Jeff。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。