惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
B
Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
博客园 - 叶小钗
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
腾讯CDC
博客园 - Franky
博客园 - 聂微东
V
Visual Studio Blog
GbyAI
GbyAI
Martin Fowler
Martin Fowler
罗磊的独立博客
Y
Y Combinator Blog

博客园 - 开发手游啦啦啦

用TypeScript开发爬虫程序 ABP导航源码分析 ABP的语言切换 AngularJs自定义指令详解(10) - 执行次序 AngularJs自定义指令详解(9) - terminal AngularJs自定义指令详解(8) - priority AngularJs自定义指令详解(6) - controller、require AngularJs自定义指令详解(5) - link AngularJs自定义指令详解(4) - transclude AngularJs自定义指令详解(3) - scope AngularJs自定义指令详解(2) - template AngularJs自定义指令详解(1) - restrict ABP的Zero Sample ABP的工作单元 ABP的数据过滤器(Data Filters) ABP的事件总线和领域事件(EventBus & Domain Events) 初入Cocos2d-x 2.2 quick-cocos2d-x之testlua之VisibleRect.lua quick-cocos2d-x之testlua之mainMenu.lua
AngularJs自定义指令详解(7) - multiElement
开发手游啦啦啦 · 2015-07-05 · via 博客园 - 开发手游啦啦啦

multiElement不太常用,从下面这个例子可以大致看出它的作用:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <script src="../lib/angular-1.3.16/angular.min.js"></script>
    <script src=""></script>
    <title></title>
    <script language="JavaScript">
        var app = angular.module("app", []);
        app.directive('myDirective',function () {
            return{
                multiElement:true,
                link:function(scope,element,attrs){
                    console.log(element);
                }
            };
        });
    </script>
</head>
<body ng-app="app">
<span my-directive-start></span>
<span my-directive-end></span>
</body>
</html>

在Chrome浏览器中审查元素,看看控制台输出:

由此可知传给连接函数的element不是单个元素,而是3个,包括两个span和一个回车符。

实际上,我们把HTML代码改成:

<my-directive><span></span>
<span></span></my-directive>

控制台输出:

这时候我们仍然可以在childNodes中找到它们。

所以把multiElement设为true的目的,仅仅是引入my-directive-start、my-directive-end这两个标记,在某些时候有利于我们书写。

现在看看AngularJs内置指令ngRepeat(可以使用ng-repeat-start和ng-repeat-end)类似的做法:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <script src="../lib/angular-1.3.16/angular.min.js"></script>
    <script src=""></script>
    <title></title>
    <script language="JavaScript">
        var app = angular.module("app", []);
        app.run(function ($rootScope) {
            $rootScope.list = [{name: '张三', age: 26, gender: ''}, {name: '李四', age: 24, gender: ''}];
        });
    </script>
</head>
<body ng-app="app">
<table border="1">
    <tbody>
    <tr ng-repeat-start="l in list">
        <td>{{l.name}}</td>
        <td></td>
    </tr>
    <tr ng-repeat-end>
        <td>{{l.age}}</td>
        <td>{{l.gender}}</td>
    </tr>
    </tbody>
</table>
</body>
</html>

输出:

如果没有ng-repeat-start和ng-repeat-end,用ng-repeat输出上面的东西,很吃力。

 我们在ng-repeat-start和ng-repeat-end之间可以任意胡来,例子:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <script src="../lib/angular-1.3.16/angular.min.js"></script>
    <script src=""></script>
    <title></title>
    <script language="JavaScript">
        var app = angular.module("app", []);
        app.run(function ($rootScope) {
            $rootScope.list = [{name: '张三', age: 26, gender: ''}, {name: '李四', age: 24, gender: ''}];
        });
    </script>
</head>
<body ng-app="app">
<table border="1">
    <tbody>
    <tr ng-repeat-start="l in list">
        <td>{{l.name}}</td>
    </tr>
    <tr>
        <td>{{l.age}}</td>
    </tr>
    <tr ng-repeat-end>
        <td>{{l.gender}}</td>
    </tr>
    </tbody>
</table>
</body>
</html>

输出: