2014-01-27 11 views
-1

Пытается инициализировать окно ввода текста для ввода пользователем, но получить ошибку. $ scope может устанавливать intext при раскомментировании. Я взломал это (вроде), но, как обычно, я пропустил что-то основное.angularjs - неопределенная ошибка из текстового поля ввода

Ошибка консоли: 'Ошибка: $ scope.intext undefined', если я не назначу значение. Поле ввода предназначено исключительно для ввода пользователем. Также заметил, что я могу назначить «почему» и не получить ошибку, пока не попытаюсь разделить.

angular.module('myApp', []) 
    .controller('TextScreen', ['$scope', function($scope) { 
     //$scope.intext = "what"; 
     var why = $scope.intext.split('-'); 
}]); 

HTML

<div id="cont" ng-app="myApp"> 
<div ng-controller="TextScreen"> 
    <input type="text" ng-model="intext" /> 
</div> 
</div> 
+0

Вы хотите сделать что-то вроде этого: http://jsfiddle.net/JFX23/? –

ответ

1

Причина заключается в том, что $scope.intext не определено. intext.

Непонятно, что вы пытаетесь сделать, но я предлагаю инициализировать intext или переместить код в функцию. Как это:

$scope.change = function() { 
    var why = $scope.intext.split('-'); 
}; 

HTML

<input type="text" ng-model="intext" ng-change="change()" /> 

Как предложено в угловом документации здесь:

http://docs.angularjs.org/api/ng.directive:ngChange

Или попробуйте с помощью ng-init

ng-init="intext= 'demo'" 

Образец

<input type="text" ng-model="intext" ng-init="intext= 'demo'" /> 

O

+0

Спасибо, что вернулись! ng-change оценивается немедленно в соответствии с документами, поэтому для ввода пользователем не будет запускаться с каждым символом? Я взломал его, инициализируя переменную. Мне нужно что-то вроде onchange, поскольку текстовая строка должна быть оценена после щелчка пользователя. Чувство, будто я должен оставаться jQuery/native javascript бесплатно, по крайней мере, до тех пор, пока не пойму угловатый путь. – openquestions

1

The

var why = $scope.intext.split('-'); 

обрабатывается немедленно, но в тот момент, $scope.intext не определен, поэтому вы не можете назвать .split на нем.

Если вы пытаетесь действовать по значению, которое пользователь вводит, вы должны поместить часы на нем

$scope.$watch('intext', function(oldvalue, newvalue){ 
    if(angular.isDefined(newvalue) && newvalue != oldvalue) //ensuring undefined should not processed 
    var why = newvalue.split('-'); 
}); 
Смежные вопросы