我创建了一个基本directive
来更新div中的时间:
myApp.directive('updateTime', function($timeout, $filter) {
return function(scope, element, attrs) {
var timeoutId;
function updateTime() {
element.text($filter('dateFromNow')(attrs.updateTime));$()
}
scope.$watch(attrs.updateTime, function(value) {
updateTime();
});
function updateLater() {
timeoutId = $timeout(function() {
updateTime();
updateLater();
}, 5000);
}
element.bind('$destroy', function() {
$timeout.cancel(timeoutId);
});
updateLater();
}
});
我的模型包含一个日期对象,就像2016-06-03T09:14:57.948Z
一样,但Angular似乎在抱怨它采用那种格式。这是我的数据库(MongoDB)提供日期的方式。
Error: $parse:syntax
Syntax Error
Syntax Error: Token 'T09' is an unexpected token at column 11 of the expression [2016-06-03T09:14:57.948Z] starting at [T09:14:57.948Z].
如何解决此错误?
修改
这是我的dateFromNow
过滤器。它只是使用MomentJS将日期对象(或日期字符串)转换为time ago
字符串(例如" 2分钟前"):
myApp.filter('dateFromNow', function () {
return function (date, onlyFromNow) {
return moment(date).fromNow();
}
});
在我的控制台中,我可以看到错误发生在我的指令中的scope.$watch(....
内。
答案 0 :(得分:1)
错误从scope.$watch
抛出,因为您在传递实际值(2016-06-03T09:14:57.948Z)时需要知道变量的名称(或路径)。
您可以通过一些修改来修复它。
使用您的指令如下:
<div update-time="myTime">
通过解析它来获取updateTime()
中的属性值:
$parse(attrs.updateTime)(scope)
这需要将$parse
服务注入您的指令:
.directive('updateTime', function($timeout, $filter, $parse) {
// ...
})