TypeError: не удается прочитать свойство ‘inputText’ неопределенного значения из-за соглашения об именовании, которое я использовал как «lunchCtrl.iform.inputText»

#angularjs

#angularjs

Вопрос:

Я получаю эту ошибку, когда нажимаю кнопку, ничего не вводя в поле ввода. Я вижу, что это связано с соглашением об именовании как «lunchCtrl.iform.inputText». когда я использую это как «lunchCtrl.inputText» или просто «inputText» в контроллере и html, все идет хорошо без ошибок для пустого значения при нажатии кнопки. если я введу какой-либо текст и нажму кнопку, все будет хорошо.

кто-нибудь может мне помочь, что здесь не так. я прикрепил код в следующем jsfiddle [здесь] [1] . пожалуйста, помогите мне найти причину.

https://jsfiddle.net/29bmy95j/

код для здесь: index.html

Проверка обеда

      <div class="form-group">
         <input id="lunch-menu" type="text"
         placeholder="list comma separated dishes you usually have for lunch"
         class="form-control" ng-model="lunchCtrl.iform.inputText">
     </div>
     <div class="form-group">
         <button class="btn btn-default" ng-click="checkTooMuch()">Check If Too Much</button>
     </div>
     <div class="form-group message">
       <!-- Your message can go here. -->
     </div>
     Entered values::{{lunchCtrl.iform.inputText}}
     <p ng-bind="errorMsg" style="color:red"></p>
  

App.js:

 var app=angular.module('LunchCheck', []);
app.controller('LunchCheckController', ["$scope",function($scope){
//function for checkTooMuch() ng-click event
$scope.checkTooMuch=function(){

    var inputfieldVal=$scope.lunchCtrl.iform.inputText;
    $scope.inputfieldValScope=inputfieldVal;
    var array=inputfieldVal.split(',');
    //$scope.array=array;
    var arrLen=array.length;
    if(arrLen > 3){$scope.errorMsg="Too much!";}
    else{$scope.errorMsg="Enjoy!";}
}
}]);
  

изображение ошибки

Ответ №1:

Потому $scope.lunchCtrl.iform что не определено, поэтому изначально, когда вы ничего не вводите в текстовое $scope.lunchCtrl.iform.inputText поле, это вызовет ошибку.

 $scope.checkTooMuch=function(){

    var inputfieldVal=$scope.lunchCtrl.iform.inputText;//error
  

Таким образом, исправление будет заключаться в

ВАРИАНТ 1

напишите проверку и избегайте:

 $scope.checkTooMuch=function(){
    if (!$scope.lunchCtrl.iform.inputText){
       return;
    }

    ...your code
  

ВАРИАНТ 2

Определите свою переменную, как показано ниже, в контроллере

 app.controller('LunchCheckController', ["$scope",function($scope){
    //var v=$scope.inputText='';
    this.iform = {inputText:""};
    ...
  

рабочий код здесь

Комментарии:

1. Но у меня есть сомнения здесь. В этом случае, если я проверяю «arrLen», не вводя ничего в поле ввода, я получаю значение «1». я думаю, это должно быть «0». мне интересно, почему это «1» с предоставленным вами решением.