AngularJS 的内联模板不适用于 XHTML
Inline template of AngularJS does not work with XHTML
我对 AngularJS 使用 XHTML 的内联模板的行为感到困惑。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" data-ng-app="app">
<head>
<script type="text/ecmascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script>
<script type="text/ecmascript">
//<![CDATA[
var app = angular.module('app', []);
app.directive('dir',function(){ return{
transclude: true,
templateUrl: 'template'
//template: '<div>Input: <span data-ng-transclude=""></span></div>'
//if I use template instead of templateUrl, the code works well.
}; });
//]]>
</script>
<title>Angular JS template</title>
</head>
<body>
<script type="text/ng-template" id="template">
<div>Input: <span data-ng-transclude=""></span></div>
</script>
<input type="text" data-ng-model="input"></input>
<div data-dir="dir"><span style="text-decoration: underline">{{input}}</span></div>
</body>
</html>
此代码适用于源 .html
的扩展,但对于 .xhtml
,<div data-dir="dir">
的子节点变为空。
如果有人能告诉我更改扩展名会发生什么,我会很高兴。
XHTML 对脚本的内容更加烦躁。
解决方法:将模板中的<
全部改为<
。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" data-ng-app="app">
<head>
<script type="text/ecmascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script>
<script type="text/ecmascript">
//<![CDATA[
var app = angular.module('app', []);
app.directive('dir',function(){ return{
transclude: true,
templateUrl: 'template'
//template: '<div>Input: <span data-ng-transclude=""></span></div>'
//if I use template instead of templateUrl, the code works well.
}; });
//]]>
</script>
<title>Angular JS template</title>
</head>
<body>
<script type="text/ng-template" id="template">
<div>Input: <span data-ng-transclude=""></span></div>
</script>
<input type="text" data-ng-model="input"></input>
<div data-dir="dir"><span style="text-decoration: underline">{{input}}</span></div>
</body>
</html>
或者使用 CDATA 块作为模板。
我对 AngularJS 使用 XHTML 的内联模板的行为感到困惑。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" data-ng-app="app">
<head>
<script type="text/ecmascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script>
<script type="text/ecmascript">
//<![CDATA[
var app = angular.module('app', []);
app.directive('dir',function(){ return{
transclude: true,
templateUrl: 'template'
//template: '<div>Input: <span data-ng-transclude=""></span></div>'
//if I use template instead of templateUrl, the code works well.
}; });
//]]>
</script>
<title>Angular JS template</title>
</head>
<body>
<script type="text/ng-template" id="template">
<div>Input: <span data-ng-transclude=""></span></div>
</script>
<input type="text" data-ng-model="input"></input>
<div data-dir="dir"><span style="text-decoration: underline">{{input}}</span></div>
</body>
</html>
此代码适用于源 .html
的扩展,但对于 .xhtml
,<div data-dir="dir">
的子节点变为空。
如果有人能告诉我更改扩展名会发生什么,我会很高兴。
XHTML 对脚本的内容更加烦躁。
解决方法:将模板中的<
全部改为<
。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" data-ng-app="app">
<head>
<script type="text/ecmascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script>
<script type="text/ecmascript">
//<![CDATA[
var app = angular.module('app', []);
app.directive('dir',function(){ return{
transclude: true,
templateUrl: 'template'
//template: '<div>Input: <span data-ng-transclude=""></span></div>'
//if I use template instead of templateUrl, the code works well.
}; });
//]]>
</script>
<title>Angular JS template</title>
</head>
<body>
<script type="text/ng-template" id="template">
<div>Input: <span data-ng-transclude=""></span></div>
</script>
<input type="text" data-ng-model="input"></input>
<div data-dir="dir"><span style="text-decoration: underline">{{input}}</span></div>
</body>
</html>
或者使用 CDATA 块作为模板。