Javascript 如何将函数应用于控制器内的angularjs表达式?

Javascript 如何将函数应用于控制器内的angularjs表达式?,javascript,angularjs,controller,angularjs-scope,Javascript,Angularjs,Controller,Angularjs Scope,简单的问题是,我想将控制器范围内的函数应用于表达式 这是我控制器中的HTML <p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate}}</span></p> 我想做的是像这样将formatMysqlTimestampToHumanreadableDateTime应用到paginDetail.pubdate <p><span ng-if

简单的问题是,我想将控制器范围内的函数应用于表达式

这是我控制器中的HTML

<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate}}</span></p>
我想做的是像这样将formatMysqlTimestampToHumanreadableDateTime应用到paginDetail.pubdate

<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{formatMysqlTimestampToHumanreadableDateTime(paginaDetail.pubdate)}}</span></p>
Vanaf{{formatMysqlTimestampToHumanreadableDateTime(paginDetail.pubdate)}

还是这个

<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate|formatMysqlTimestampToHumanreadableDateTime}}</span></p>
Vanaf{{paginDetail.pubdate | formatMysqlTimestampToHumanreadableDateTime}

但这两种方法都不正确

第一种方法可以工作,但在控制台上我发现了这个错误

错误:[$interpolate:interr] $interpolate/interr?p0=Tot%20%7B%7FormatMySqlTimestampToHumanReadableDateTime(PaginDetail.endpubdate)%7D%7D&p1=TypeError%3A%20DateTime%20未定义
t/实际上,您的示例
{{func(param)}}
运行良好:。问题出在其他方面。试着用小提琴来说明你的问题。

如果我能提供一个基于控制器的操作的替代选项。。。这看起来是一个很好的场景

其思想是在将输入放入html时使用过滤器,如
{{{myDate | format}

过滤器的定义如下:

myApp.filter('format', function () {
   return function (input) {
      //your date parser here
   };
});
或者你想用它做什么。这样,您就可以重用它,而不必将该函数放在您希望使用它的每个控制器中

这是一个你可以扩展的方法,让你继续前进

edit仔细查看错误,我认为您的实际问题是未填充
.pubdate
TypeError:sDateTime未定义
)。尝试在函数中设置断点或查看console的说明。

这个问题已经有了正确的答案,但这可能有助于更好地理解它。对于“如何在角度表达式中运行/应用函数”的问题,我可以这样介绍

将函数分配给$scope.something并运行它。示例:

控制器中的JavaScript:

$scope.printMe= function(text){
   return text;
}
HTML(表达式):

{{printMe(“你好!”)}


您将获得
你好在你的
标签中

不幸的是,我不能在小提琴上轻松复制它。我可以告诉你,我注意到了这个行为,在使用过滤器时,一切都和我的第一个解决方案一样正常,但仍然有相同的错误。因此,我控制台记录了
输入
,我注意到,如果我将此函数应用于我的
pubdate
,该值会记录四次,前两次该值未定义,其余两次是正确的值。我只是不明白为什么叫四次。。。有线索吗?因为我可以像这样解决它,
if(typeof input==='undefined'){return”“;}
但它并不是一个聪明的解决方案……Angular一直在控制器上的模型上循环,以查看是否有任何更改。这就是双向绑定的工作原理。如果通过AJAX或任何其他不初始化
.pubdate
值的方法加载,则第一次加载angular时,它将首先清空,然后填充。无论如何,这将不止一次。它被称为
$digest
循环。我还是推荐过滤器。。。关于摘要的一些信息:您是对的,它是通过ajax api管理的,所以我假设这个检查
if(typeof input==“undefined”){return”“;}
可以。顺便说一下,谢谢你的链接!
$scope.printMe= function(text){
   return text;
}
<p>{{printMe("Hello!")}}</p>