简单的问题,我想在控制器作用域内应用一个函数到一个表达式中。
这是我的控制器内的HTML代码:
<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate}}</span></p>
这是我的 JavaScript。
$scope.formatMysqlTimestampToHumanreadableDateTime = function(sDateTime){
sDateTime = sDateTime.toString();
var sHumanreadableDateTime = sDateTime.substring(8, 10) + "/" + sDateTime.substring(5, 7) + "/" + sDateTime.substring(0, 4);
sHumanreadableDateTime += " " + sDateTime.substring(11, 13) + ":" + sDateTime.substring(14, 16);
return sHumanreadableDateTime;
};
我想要做的是将 formatMysqlTimestampToHumanreadableDateTime 应用于 paginaDetail.pubdate ,就像这样:
<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{formatMysqlTimestampToHumanreadableDateTime(paginaDetail.pubdate)}}</span></p>
或者这个
<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate|formatMysqlTimestampToHumanreadableDateTime}}</span></p>
但两种方法都不正确。
第一种方法可行,但在控制台中出现以下错误:
Error: [$interpolate:interr] http://errors.angularjs.org/1.2.16/$interpolate/interr?p0=Tot%20%7B%7BformatMysqlTimestampToHumanreadableDateTime(paginaDetail.endpubdate)%7D%7D&p1=TypeError%3A%20sDateTime%20is%20undefined t/<@http://mysite.local/js/libs/angular.min.js:6:443 g/r@http://mysite.local/js/libs/angular.min.js:78:354 Yd/this.$gethttp://mysite.local/js/libs/angular.min.js:106:161 Yd/this.$gethttp://mysite.local/js/libs/angular.min.js:109:285 f@http://mysite.local/js/libs/angular.min.js:71:234 F@http://mysite.local/js/libs/angular.min.js:75:408 ve/http://mysite.local/js/libs/angular.min.js:76:457
第二种方法根本不起作用。
您有什么建议吗?非常感谢。
input
,我注意到如果我将此函数应用于我的pubdate
,该值将被记录四次,前两次该值为_undefined_,另外两次则是正确的值。我只是不明白为什么会被调用四次...有什么线索吗?因为我可以像这样解决它if(typeof input === 'undefined'){return "";}
但这并不是一个很聪明的解决方案... - axel.pubdate
值的方法加载它第一次加载,那么它将首先为空,然后填充。在任何情况下,它都将不止一次被调用。这称为$digest
循环。我仍然建议使用过滤器...关于digest的一些信息:http://onehungrymind.com/notes-on-angularjs-scope-life-cycle/ - Jorgif(typeof input === 'undefined'){return "";}
可能没问题。顺便感谢你提供的链接! - axel