除非你使用一些奇怪的 Angular 版本,否则你的代码根本不应该工作,因为第二个参数 ofmodule
是必需的:
除非您已经定义myApp
(我假设您没有),否则您上面的代码将无法正常工作。定义模块时,需要第二个参数(依赖项列表):
angular.module('myApp', []); // this creates an app (setter)
angular.module('myApp'); // this creates gives you a reference to an already created app (getter)
否则你的代码似乎工作正常:http: //jsfiddle.net/cjWQB/
也就是说,根据你在做什么(或者我可能不知道time
标签是什么),创建一个名为 time 的元素指令(而不是属性指令)可能更有意义。
更新:根据您上面的提琴手,当您定义一个模块时,您的ngApp
指令需要指向该命名模块。唯一<html ng-app>
可行的方法是当您采用更简单的方法并仅使用以下控制器功能时:
HTML
<html ng-app>
<div ng-controller="TestCtrl">...</div>
</html>
JavaScript
function TestCtrl($scope) {
}
编辑
根据您对问题的更改,由于您现在使用的是元素指令,因此您需要从不同的地方提取日期。正如马克在上面的评论中建议的那样,那个地方是scope.temporal
:http: //jsfiddle.net/Ns2Ny/4/
但是在你的指令中直接引用temporal
并不能真正使它可重用,所以你会想加倍努力并使用它$watch
来间接引用该值并密切关注它:
http://jsfiddle.net/Ns2Ny/5/
angular.module('myApp',[])
.controller('temporalCtrl', function($scope) {
$scope.temporal = "2012-11-10T12:00:00Z";
})
.directive('time', function() {
return {
restrict: 'E',
link: function (scope, el, at) {
console.log('scope', scope);
console.log('at', at);
scope.$watch(at.datetime, function (newValue) {
el.text((new Date(newValue)).toDateString());
});
}
};
});
记下我的console.log
陈述。了解其中的内容scope
和at
调试时间非常有帮助。