W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
transclude 有兩方面的東西,一個是使用 $compile 時傳入的函數(shù),另一個是定義指令的 compile 函數(shù)時接受的一個參數(shù)。雖然這里的一出一進本來是相互對應的,但是實際使用中,因為大部分時候不會手動調(diào)用 $compile ,所以,在“默認”情況下,指令接受的 transclude 又會是一個比較特殊的函數(shù)。
看一個基本的例子:
var app = angular.module('Demo', [], angular.noop); app.directive('more', function(){ var func = function(element, attrs, transclude){ var sum = transclude(1, 2); console.log(sum); console.log(element); } return {compile: func, restrict: 'E'}; }); app.controller('TestCtrl', function($scope, $compile, $element){ var s = '<more>123</more>'; var link = $compile(s, function(a, b){return a + b}); var node = link($scope); $element.append(node); }); angular.bootstrap(document, ['Demo']);
我們定義了一個 more 指令,它的 compile 函數(shù)的第三個參數(shù),就是我們手工 $compile 時傳入的。
如果不是手工 $compile ,而是 ng 初始化時找出的指令,則 transclude 是一個 link 函數(shù)(指令定義需要設置 transclude 選項):
<div more>123</div>
app.directive('more', function($rootScope, $document){ var func = function(element, attrs, link){ var node = link($rootScope); node.removeAttr('more'); //不去掉就變死循環(huán)了 $('body', $document).append(node); } return {compile: func, transclude: 'element', // element是節(jié)點沒,其它值是節(jié)點的內(nèi)容沒 restrict: 'A'}; });
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: