【发布时间】:2016-09-15 20:43:06
【问题描述】:
我还在学习 Angular,所以我想编写自己的控件来了解有关 Angular 工作原理的更多信息。我从一个日期选择器开始,因为这是我偶尔需要的一个控件,并且它嵌入了很多永远不会改变的功能。
我通过在指令中直接声明 template 来启动并运行该日期选择器,但是当我想将模板重新定位到它自己的 HTML 文件时,它开始变得很尴尬。
根据 Angular 文档,应该可以为控件的模板指定一个外部 HTML 文件,因此随着控件的不断发展,我尝试这样做。
现在的指令如下:
angular.module('my.Controls', [])
.directive('myDatepicker', [function () {
return {
restrict: 'AE',
scope: {},
require: 'ngModel',
templateUrl: '/Templates/my/DatePicker.html',
link: function (scope, iElement, iAttrs, ngModelController) {
// Some datepicker functionality
}
}]);
当然还有一个 HTML 文件,用于测试指令是否有效:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
<script type="text/javascript" src="Scripts/angular/current/angular.min.js"></script>
<script type="text/javascript" src="Scripts/my/Controls.js"></script>
<script type="text/javascript">
var app = angular.module('myApp', ['my.Controls']);
var ctrl = app.controller('myCtrl', ['$scope', function ($scope) {
$scope.Date = new Date(2016, 08, 15);
}]);
</script>
</head>
<body ng-controller="myCtrl">
{{Date}}
<my-datepicker ng-model="Date" />
</body>
</html>
现在我可以确认 .js 文件已加载并且应用程序和控制器正在运行。但是,由于我将template: '...' 属性更改为templateUrl: '...',我什至无法验证 Angular 是否会尝试加载 HTML 文件,因为我看不到对其提出的任何请求。
我在这里缺少什么?为什么 Angular 甚至不尝试从 URL 加载模板?
【问题讨论】:
-
这是一个有效的文件
'my.DatePicker.html'??似乎“我的”后面有一个点 -
没有尝试或不尝试获取模板。你的网址是错误的。
-
抱歉,编辑部分信息时打错了...实际上是
/,但仍然无效。 -
将你的元素改为
<my-datepicker></my-datepicker>(非自闭) -
尝试删除路径开头的
/:templateUrl: 'Templates/my/DatePicker.html'
标签: javascript angularjs angular-directive