Javascript AngularJS:无法读取属性';子串';未定义的
对AngularJS来说非常新。。。我有一个输入字段,希望第一个字母大写。我添加了以下指令:Javascript AngularJS:无法读取属性';子串';未定义的,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,对AngularJS来说非常新。。。我有一个输入字段,希望第一个字母大写。我添加了以下指令: .directive('capitalizeFirst', function () { return { require: 'ngModel', link: function ($scope, $element, $attrs, $modelCtrl) { var capitalize = function (inputValue) {
.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”
有人能告诉我出了什么事吗?提前谢谢 似乎您没有检查inputValue是否为null
.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
}
};})
这是我的解决方案,用于在进行API调用时调用
str.slice(,)
,并且该页面可能在API调用完成之前加载,因此您将收到一个错误消息:
无法读取未定义的属性“substring”
下面是我的angular/js/filters.js
简单代码,用于评估我们调用slice()
或substring()
的str
在切片之前首先存在:
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()
之间的区别: