2015-09-19 105 views
0

手動提交表單我有這個角形式在angularJS

<ion-nav-buttons side="right"> 
    <a class="button button-icon icon ion-android-done" href="#search/search-form" ng-click="submitNewPublishMessage(msgForm.$valid, msgForm)"></a> 
    </ion-nav-buttons> 
    <ion-content> 
     <form name="msgForm" class="css-form" novalidate> 
     <input type="text" name="title" ng-model="msgForm.title" ng-minlength="10" ng-maxlength="150" required> 
     ... 
     ... 

我想手動提交form當我通過調用submitNewPublishMessage()內部控制器點擊amsgForm.$valid, msgForm來了不確定的。

$scope.submitNewPublishMessage = function(isValid, form) 
{ 
    alert(isValid); 
    alert(JSON.stringify(form)); 
} 

回答

1

NG單擊事件我不知道離子,但我的猜測是,ionContent指令都有自己的範圍,並且,如此創建形式在這個內部範圍內,而不是控制器的範圍。

一如既往,訣竅是避免直接將事物存儲在作用域中,而是將它們作爲作用域的對象的屬性進行存儲。

因此,在控制器中添加以下代碼行:

$scope.forms = { 
}; 

$scope.model = { 
}; 

而在視圖中,使用

<ion-nav-buttons side="right"> 
    <a class="button button-icon icon ion-android-done" href="" ng-click="submitNewPublishMessage(forms.msgForm)"></a> 
</ion-nav-buttons> 
<ion-content> 
    <form name="forms.msgForm" class="css-form" novalidate> 
    <input type="text" name="title" ng-model="model.title" ng-minlength="10" ng-maxlength="150" required> 

注意上面

  • 不除了msgForm之外,還通過msgForm.$valid標誌,因爲它是多餘的
  • 不存儲表單的模型(即在表單域中輸入的值)在NgFormController本身中。這樣做會導致輸入小部件和輸入模型之間發生衝突。

如果我是你,我真的會真的避免使用鏈接提交表單。鏈接是爲了導航,而不是表單提交。使用一個按鈕。

+0

裏面'submitNewPublishMessage'我怎麼會得到表單字段值在這裏我得到錯誤像'{「$$ parentForm」:{},「$ error」:{「minlength」:[{「$ viewValue」:「 hdjdjfgg「,」$$ rawModelValue「:」hdjdjfgg「,」$ validators「:{},」$ asyncValidator「 – manish

+0

表單字段值位於'$ scope.model'中。 –

0

把裏面的格式如

<form name="msgForm" class="css-form" novalidate> 
     <ion-nav-buttons side="right"> 
     <a class="button button-icon icon ion-android-done" href="#search/search-form" ng-click="submitNewPublishMessage(msgForm.$valid, msgForm)"></a> 
     </ion-nav-buttons> 
     <ion-content> 

      <input type="text" name="title" ng-model="msgForm.title" ng-minlength="10" ng-maxlength="150" required> 
      ... 
      ... 
</form>