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

时间:2014-06-23 08:09:21

标签: javascript angularjs controller angularjs-scope

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

这是我控制器中的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>

但两种方式都不正确。

第一种方法有效,但在控制台上我发现了这个错误

  

错误:[$ interpolate:interr]   http://errors.angularjs.org/1.2.16/ $插值/ INTERR P0 =托特%20%7B%7BformatMysqlTimestampToHumanreadableDateTime(paginaDetail.endpubdate)%7D%7D&安培; P1 =类型错误%3A%20sDateTime%图20是%20undefined   吨/&LT; @ http://mysite.local/js/libs/angular.min.js:6:443   G / R @ http://mysite.local/js/libs/angular.min.js:78:354   。YD /这$ gethttp://mysite.local/js/libs/angular.min.js:106:161   。YD /这$ 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

     

http://mysite.local/js/libs/angular.min.js第89行

而第二个根本不起作用。

你有什么建议吗?非常感谢。

3 个答案:

答案 0 :(得分:5)

如果我可以为基于控制器的操作提供替代选项......对于filter

来说这看起来很棒

这个想法是在将输入放入像{{myDate|format}}这样的html时使用过滤输入。

过滤器的定义如下:

myApp.filter('format', function () {
   return function (input) {
      //your date parser here
   };
});

或者你想用它做什么。通过这种方式,您可以重复使用它,而无需将该功能放在您希望使用它的每个控制器中。

这是您可以展开的fiddle,以帮助您前进。

编辑仔细查看错误我认为您的实际问题是.pubdate未填充(TypeError: sDateTime is not defined)。尝试在函数中放置断点或查看控制台说的内容。

答案 1 :(得分:4)

实际上您的示例{{func(param)}}工作正常:http://jsfiddle.net/HB7LU/4418/。问题出在其他方面。试着说明你的问题。

答案 2 :(得分:3)

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

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

控制器内的JavaScript:

$scope.printMe= function(text){
   return text;
}

HTML(表达式):

<p>{{printMe("Hello!")}}</p>

您的Hello!代码

中会显示<p>