Javascript 如何将函数应用于控制器内的angularjs表达式?
简单的问题是,我想将控制器范围内的函数应用于表达式 这是我控制器中的HTMLJavascript 如何将函数应用于控制器内的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
<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>