2016-02-19 67 views
1

我一直在寻找另一SO指令锻炼复制的元素:Angular指令中的元素编译函数是一个jQuery元素吗?

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="utf-8"> 
    <title>Directive Lifecycle</title> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script> 
    <script src="main.js"></script> 
</head> 

<body ng-app="app"> 
    <double> 
    <h1>Ask Jeebus</h1> 
    </double> 
</body> 
</html> 

JS

var app = angular.module('app', []); 
app.directive('double', function() { 
    return { 
     restrict: 'E', 
     compile: function(tElement, attrs) { 
      var content = tElement.children(); 
      tElement.append(content.clone()); 
      tElement.replaceWith(tElement.children()); 
     } 
    } 
}); 

的功能。孩子(),.append,并克隆似乎都来自jQuery的到来。我知道Angular提供了自己的jQuerylite,它有一些jQuery的部分,那是什么tElement使用?还是使用所有的jQuery。

作为一个侧面问题,为什么必须使用content.clone()?即使在我记录内容和content.clone()时,它们也不能用于tElement.append(内容),但它们似乎是相同的h1。

+0

在文档中的完整详细信息。 https://docs.angularjs.org/api/ng/function/angular.element jQlite有许多jQuery方法,它们在本文档链接 – charlietfl

+0

中列出为一个侧面问题,为什么必须使用.clone?为什么不能只做tElement.append(content); - – WinchenzoMagnifico

+0

其实看起来很奇怪,看起来像是附加了克隆,但随后整个元素在下一行被替换 – charlietfl

回答

3

这取决于您在何时加载jQuery API。

如果jQuery在Angular之前加载,您将获得jQuery编译的DOM(首选方式),否则您将编译DOM到jQLite

如果您装入的jQuery加载后角,您可以直接访问jQuery的API,你需要使用jQuery再次通过具有包装该元素在$功能像$(element)重新编译。

+0

作为侧面问题,为什么必须使用.clone?为什么不能只做 tElement.append(content); – WinchenzoMagnifico

相关问题