转载自:http://odetocode.com/blogs/scott/archive/2014/05/07/using-compile-in-angular.aspx

在AngularJS中创建一个自定义指令很容易,我们从HTML开始一个简单的例子。

{{ message }}
<div otc-dynamic></div>

上述标记正在使用一个名为otcDynamic的指令,它只提供一个模板。

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>");
}
};
});

上述示例不再正常运行,只能向用户呈现显示文字文字{{label}}的按钮。

标记必须经过Angular的编译阶段来查找和激活诸如ng-click和{{label}}的指令。

汇编

$ compile服务是用于编译的服务。调用$ compile对标记将产生一个函数,您可以使用该函数将标记绑定到特定的范围(Angular称为链接函数)。链接后,您可以将DOM元素放入浏览器。

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);
}
}
});

如果您需要$编译以响应元素事件,例如单击事件或其他非角色代码,则需要调用$ 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);
})
});
}
}
});

在Angular中使用$ compile的更多相关文章

  1. angular中的compile和link函数

    angular中的compile和link函数 前言 这篇文章,我们将通过一个实例来了解 Angular 的 directives (指令)是如何处理的.Angular 是如何在 HTML 中找到这些 ...

  2. angular源码分析:angular中脏活累活的承担者之$interpolate

    一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...

  3. angular源码分析:angular中脏活累活承担者之$parse

    我们在上一期中讲 $rootscope时,看到$rootscope是依赖$prase,其实不止是$rootscope,翻看angular的源码随便翻翻就可以发现很多地方是依赖于$parse的.而$pa ...

  4. angularjs指令中的compile与link函数详解(转)

    http://www.jb51.net/article/58229.htm 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link, ...

  5. 【转】angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下   通常大家在 ...

  6. angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下   通常大家在 ...

  7. angularjs指令中的compile与link函数详解补充

    通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link,post-link的用法与区别. angularjs里的指令非常神奇,允许你 ...

  8. 【转】angular中$parse详解教程

    原文: https://yq.aliyun.com/ziliao/40516 ------------------------------------------------------------- ...

  9. angular 中引入 markdown

    ngx-markdown 是 Angular2+ 的一个第三方库,它的主要功能是将md文件转换为HTML格式,并且支持语法高亮. GITHUB地址:https://github.com/jfcere/ ...

随机推荐

  1. ISO/IEC 9899:2011 条款6.2.4——对象的存储持久性

    6.2.4 对象的存储持久性 1.一个对象具有一个存储持久性来确定其生命周期.一共有四种存储持久性:静态的,线程的,自动的,以及分配的.分配存储在7.22.3中描述. 2.一个对象的生命周期是程序执行 ...

  2. pytorch常用normalization函数

    参考:https://blog.csdn.net/liuxiao214/article/details/81037416 归一化层,目前主要有这几个方法,Batch Normalization(201 ...

  3. bing map for wpf 怎么显示中文地图

    添加一下代码: string suriFormat = "http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41"; Mic ...

  4. Hibernate 自动更新表出错 建表或添加列,提示标识符无效

    如Oracle 数据库下报错: create table db_meta_web.user (id varchar2(255 char) not null, account varchar2(255 ...

  5. java最简单复制文件方法,不依赖任何框架

    java最简单复制文件方法   把java2.txt内容复制到java.txt中 import java.io.File; import java.io.IOException; import jav ...

  6. C#泛型学习

    什么是泛型 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将类型参数 ...

  7. Python - Django - 显示作者列表

    在 views.py 中添加展示作者列表的函数 from django.shortcuts import render, redirect, HttpResponse from app01 impor ...

  8. Intellij IDEA 2016.3.4 注册激活--转

    对于Intellij IDEA 2016.3.4  可以填写注册server http://jetbrains.tech 来激活. 参考:https://www.haxotron.com/jetbra ...

  9. .net mvc网站集成adfs(ws-fed协议)

    网站地址(本地开发测试):https://localhost:9000 第一步,adfs配置 配置要声明颁发策略(adfs要发送给网站的声明) 选择刚添加的依赖方信任,编辑颁发策略 配置完成 第二步, ...

  10. Azure Web应用相关设置

    这里用来记录自己在工作中,在Azure Web应用中用到的配置 设置NodeJS版本 Azure Web应用默认的NodeJS版本是0.10.4,这个版本太低,不能满足实际的需要 参照下图修改,根据自 ...