2016-08-23 63 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

你的對話框有自己的$範圍。所以:

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

我試圖綁定對話框中的數據,而不是父對象。 – Yakuman

+0

你可以在這裏看到整個控制器:https://jsfiddle.net/cw797a3b/ – Yakuman

1

請設置「preserveScope:真正的」在你的MD-對話框選項或...我不知道,但嘗試改變你的NG-模式,例如:「dialogObj.theSentence」和閱讀本這樣的console.log($scope.dialogObj.theSentence);

+0

'preserveScope:true'不起作用,'dialogObj.theSentence'拋出一個錯誤:'angular.js:11655 TypeError:Can not set property'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> 

並且被如下所示JS。

(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

希望這有助於其他一些莫名其妙的靈魂在那裏用類似的問題。

相關問題