2016-08-23 3 views
0

Проблема заключается в том, что ввод текстового поля из моего представления не является обязательным для контроллера.Угловые данные JS не являются обязательными с точки зрения модели

Вот вид сниппет:

<md-dialog-content ng-if="mode=='addSentence'" class="sticky-container"> 
    <md-input-container> 
     <label for="sentence-text">Enter the sentence to be corrected</label> 
     <input ng-model="theSentence" name="sentence-text"/> 
    </md-input-container> 
    <span flex>{{ error }}</span> 
    <md-button class="primary" style="float:right;" aria-label="Save" ng-click="saveNewSentence()">Save</md-button> 
</md-dialog-content> 

А вот функция управления, которая должна обрабатывать входные данные:

function ViewSentenceController($scope, $rootScope, $mdDialog) { 
    $scope.mode = mode; 
    $scope.user = user; 
    $scope.theSentence = null; 

    $scope.saveNewSentence = function() { 
     console.log($scope.theSentence); 
    } 

    $scope.cancel = function() { $mdDialog.hide(); } 

} 

Когда saveNewSentence() вызывается он записывает null на консоль, даже если я имеют вход в текстовое поле.

Уверен, что у меня что-то не хватает, я не вижу его, но я потратил слишком много времени на эту простую проблему, поэтому заблаговременно за помощь!

ответ

2

У вашего диалога есть собственный $ scope. Итак:

<input ng-model="$parent.theSentence" name="sentence-text"/> 
    </md-input-container> 
+0

Я пытаюсь связать данные в диалоговом окне, а не с родителем. – Yakuman

+0

вы можете увидеть весь контроллер здесь: https://jsfiddle.net/cw797a3b/ – Yakuman

1

Пожалуйста, установите «preserveScope: правда» в ваших Md-диалог опций или .. Я не уверен, но попробуйте изменить нг-модель, например: «dialogObj.theSentence» и прочитать, как это console.log($scope.dialogObj.theSentence);

+0

'preserveScope: true' не работает, а' dialogObj.theSentence' выдает сообщение об ошибке: 'angular.js: 11655 TypeError: не может установить свойство 'theSentence' undefined' – Yakuman

+0

вот весь контроллер: https://jsfiddle.net/cw797a3b/ – Yakuman

1

Если бы вы могли поделиться js-скрипкой вашего полного блока кода, я мог бы помочь вам лучше. Но ниже приведен пример, в котором я сначала создал 2 поля ввода с нулевым набором, а затем обновляю мою ng-модель.

<body data-ng-app="formApp"> 
<div data-ng-controller="FormCtrl"> 
    <p> 
     Name of Topic: <input type="text" data-ng-model="formData.title" placeholder="enter a title" /> 
    </p> 
    Subscribers: 
    <button data-ng-click="addSubscriber()">Add subscriber</button> 
    <table> 
     <tr> 
      <th>Name</th> 
      <th>Email</th> 
     </tr> 
     <tr data-ng-repeat="subscriber in formData.subscribers"> 
      <td><input type="text" data-ng-model="subscriber.name" placeholder="enter name" /></td> 
      <td><input type="text" data-ng-model="subscriber.email" placeholder="enter email" /></td> 
     </tr> 
    </table> 
    <hr style="margin:1em 0;" /> 
    <p> 
     <em>Debug info</em>: {{ formData }} 
    </p> 
</div> 

и ИС является таким, как показано ниже.

(function() { 
var formApp = angular.module("formApp", []); 
formApp.controller("FormCtrl", function ($scope, $timeout) { 
    $scope.formData = {}; 
    $scope.formData.subscribers = [ 
     { name: null, email: null } 
    ]; 
    $scope.addSubscriber = function() { 
     $scope.formData.subscribers.push({ name: null, email: null }); 
    }; 
}); 
})(); 

Дайте мне знать, если это поможет.

+0

вот jsfiddle https://jsfiddle.net/cw797a3b/ со всем контроллером, html, просто абсолютно базовый mdDialog вещи. – Yakuman

0

Я решил эту проблему, таким образом, путем передачи «привязываться» данных через качестве параметра функции так, вместо того, чтобы позволить угловую привязку данных из текстового поля я назвал saveNewSentence() с theSentence параметрами, переданных ему, такими как: saveNewSentence(theSentence) , Это сработало. Похоже, дешевый трюк для меня, но:

if it's stupid and it works, then it ain't stupid

Надеется, что это помогает некоторую другую разделительные перегородкам души там с подобной проблемой.

Смежные вопросы