Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:无法读取属性';子串';未定义的_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 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) {

对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”


有人能告诉我出了什么事吗?提前谢谢

似乎您没有检查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()
之间的区别: