AngularJS很新...我有一个输入字段,我希望第一个字母大写。我添加了以下指令:
.directive('capitalizeFirst', function () {
return {
require: 'ngModel',
link: function ($scope, $element, $attrs, $modelCtrl) {
var capitalize = function (inputValue) {
var capitalized = angular.uppercase(inputValue.substring(0, 1)) + inputValue.substring(1);
if (capitalized !== inputValue) {
$modelCtrl.$setViewValue(capitalized);
$modelCtrl.$render();
}
return capitalized;
};
$modelCtrl.$parsers.push(capitalize);
capitalize($scope[$attrs.ngModel]); // capitalize initial value
}
};
})
有效!但它在我的控制台中引发错误:
TypeError:无法读取属性' substring'未定义的
有谁能让我知道出了什么问题?提前谢谢!
答案 0 :(得分:5)
似乎你没有检查inputValue是否为空。
.directive('capitalizeFirst', function () {
return {
require: 'ngModel',
link: function ($scope, $element, $attrs, $modelCtrl) {
var capitalize = function (inputValue) {
if (!! inputValue) {
var capitalized = angular.uppercase(inputValue.substring(0, 1)) + inputValue.substring(1);
if (capitalized !== inputValue) {
$modelCtrl.$setViewValue(capitalized);
$modelCtrl.$render();
}
return capitalized;
}
return inputValue;
};
$modelCtrl.$parsers.push(capitalize);
capitalize($scope[$attrs.ngModel]); // capitalize initial value
}
};})
答案 1 :(得分:1)
这是我在进行API调用时调用str.slice(<start>,<end>)
的解决方案,并且可能在API调用完成之前加载页面,因此您将收到错误消息:
无法读取属性&#39; substring&#39;未定义的
以下是我的angular/js/filters.js
简单代码,用于评估我们调用str
或slice()
之前的substring()
是否在切片之前存在:
angular.module('conciergeFilters', []).filter('ph', function() {
return function(str) {
if (!! str) {
return "(" + str.slice(2,5) + ")" + str.slice(5,8) + "-" + str.slice(8,12);
}
return str;
};
});
此外,如果您尝试选择正确使用的方法,这里有一篇关于slice()
,substring()
和substr()
之间区别的博文:
http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm