我制作了以下Angular过滤器,使单词全部为大写:
angular.module('module.name').filter('toUpperCase', function() {
return function(input) {
return input.toUpperCase();
};
});
在我的观点中,我使用以下一行:
{{city | toUpperCase}}
当我正在运行代码时,城市会按原样转换为大写字母。但是,当我查看我的控制台时,我收到以下错误:
TypeError: Cannot call method 'toUpperCase' of undefined
对于我使用的每个过滤器,我都会收到此错误两次。在您执行代码之前,您是否应首先检查是否有任何输入?
答案 0 :(得分:3)
是。当JavaScript尝试访问未定义对象的任何属性时,将抛出此错误。
您可以使用 default-hack 模式来抑制此:
return function(input) {
input = input || '';
return input.toUpperCase();
};
答案 1 :(得分:2)
您需要在过滤器函数中添加一个检查,以检查其收到的输入是否为有效字符串,然后再调用toUpperCase()
。
angular.module('module.name').filter('toUpperCase', function() {
return function(input) {
return input && input.toUpperCase ? input.toUpperCase() : input;
};
});
当角度更新绑定到city
时,您可以获得city
未定义或为空的时刻,但仍然会通过过滤器。使用上面的代码,您确保只有在它是有效参数时才尝试大写。
话虽如此,你知道,已经有一个uppercase
过滤器内置角度。找到的文档为here