AngularJS中的$compile服务
来源:互联网 发布:godaddy域名续费价格 编辑:程序博客网 时间:2024/05/20 07:59
出处:http://odetocode.com/blogs/scott/archive/2014/05/07/using-compile-in-angular.aspx
创建一个AngularJSP的指令很容易,譬如下面这个例子
{{ message }}
<
div
otc-dynamic></
div
>
otcDynamic指令提供了一串HTML模板
app.directive(
"otcDynamic"
,
function
(){
return
{
template:
"<button ng-click='doSomething()'>{{label}}</div>"
};
});
结合控制器的定义,当用户点击按钮时,便会在页面上看到内容的变化
app.controller(
"mainController"
,
function
($scope){
$scope.label =
"Please click"
;
$scope.doSomething =
function
(){
$scope.message =
"Clicked!"
;
};
});
动态化
假设otcDynamic指令不能使用静态模板。指令需要依赖上下文环境,譬如标记位、用户数据、服务信息等。下面来模拟这个场景,我们还是使用静态字符串,不过假设字符串是动态创建的,并且使用element.html函数插入到DOM元素中。
app.directive(
"otcDynamic"
,
function
(){
return
{
link:
function
(scope, element){
element.html(
"<button ng-click='doSomething()'>{{label}}</button>"
);
}
};
});
上面的例子中,lablel内容不在会发生变化,即使用户点击按钮。最关键的原因时AngularJS已经过了编译阶段。
编译服务
借助AnglarJS的编译$compile服务,可以解决此问题
app.directive(
"otcDynamic"
,
function
($compile){
return
{
link:
function
(scope, element){
var
template =
"<button ng-click='doSomething()'>{{label}}</button>"
;
var
linkFn = $compile(template);
var
content = linkFn(scope);
element.append(content);
}
}
});
如果要元素事件中或者非AngularJS的代码中使用$compile服务,需要配合$apply检测数据变化。
app.directive(
"otcDynamic"
,
function
($compile) {
var
template =
"<button ng-click='doSomething()'>{{label}}</button>"
;
return
{
link:
function
(scope, element){
element.on(
"click"
,
function
() {
scope.$apply(
function
() {
var
content = $compile(template)(scope);
element.append(content);
})
});
}
}
});
0 0
- AngularJS中的$compile服务
- AngularJS中的$compile服务
- angularjs指令中的compile详解
- angularjs中的transclude参数的理解($tranclude服务以及compile中transclude)
- $q -- AngularJS中的服务
- $q -- AngularJS中的服务
- angularjs中的$interpolate服务
- AngularJS中的 $http服务
- angularjs中的$sompile服务
- angularJs中的工厂服务
- angularJs中的provider服务
- angularJs中的service服务
- angularJs中的http服务
- angularJS 中的服务 $q
- angularjs指令中的compile与link函数详解
- angularjs指令中的compile与link函数详解
- AngularJS指令中的compile与link函数解析
- angularjs指令中的compile与link函数详解。
- Android开发之OkHttp的使用
- SQL添加删除、查询表、字段说明
- 【LeetCode】132. Palindrome Partitioning II 基于动态规划DP、C++、Java的分析及解法
- 图像处理和识别中常用的Opencv函数
- grep '^Group\|^User' /etc/httpd/conf/httpd.conf
- AngularJS中的$compile服务
- HQL和SQL的区别
- 算法学习(十三)一堆数据中找到丢失数字问题
- admob在cocos2dx闪退解决办法
- 项目经理 架构师的区别
- Android签名证书的sha1值获取方式(使用keytool )
- JS后退一页, JS返回上一页代码, JS返回下一页,JS返回第几页,JS页面跳转,JS引用
- [案例]克拉玛依:打造最安全的世界石油城
- Swift 编程语言入门教程