Подтвердить что ты не робот

Ng-model undefined в контроллере

У меня возникают некоторые "проблемы", считывающие ng-модель из контроллера.

Я хочу сделать это:

<input type="text" ng-model="code">
<button ng-click="setCode()">Login</button>

И в моем контроллере доступ к этой переменной:

 $scope.setCode = function(){
    alert($scope.code);
  }

Это то, что я хочу сделать, но моя переменная кода undefined.

Я нашел два способа заставить это работать:

1) Передача переменной в качестве аргумента

<input type="text" ng-model="code">
<button ng-click="setCode(code)">Login</button>

и

$scope.setCode = function(code){
    alert(code);
  }

2) Объявление моей переменной как объекта

<input type="text" ng-model="code.text">
<button ng-click="setCode()">Login</button>

и

$scope.code = {text: 'foo'};

[...]

$scope.setCode = function(){
    console.log($scope.code);
  }

(я предпочитаю второй)

Но я немного смущен тем, что должен делать. Можно ли объявить мои ng-модели как объекты? Я должен объявить ВСЕ мои модели как объекты?


EDIT: Вот Plnkr проблемы

В этом примере (я использую Ionic framework), я объявляю переменный код с тегом значений, когда я меняю модель на входе и нажмите кнопку "Пуск", теоретически я должен увидеть в предупреждении новое значение модели. Но то, что я вижу, является старым.

Спасибо!

4b9b3361

Ответ 1

Я установил ваш пример plnkr с использованием объектной модели вместо примитивного типа.

$scope.model = {};
$scope.model.code = "test";

$scope.setCode = function(){
    alert($scope.model.code);
}

Смотрите plnkr.

Ответ 2

Ваш первый пример работает, вот plunkr.

Если вы нажмете кнопку без ввода какого-либо текста в поле ввода, вы получите предупреждение undefined. $scope.code определяется, как только вы введете что-то в его связанное поле ng-model="code".

Вы также можете инициализировать его по умолчанию в своем контроллере:

$scope.code = 'my default value';

Ответ 3

Ионная директива создаст новую область, если вы хотите напрямую использовать объект кода в контроллере, вы должны установить ng-controller на ионное содержимое на вашей HTML-странице, а не в состояние маршрутизатора.