2011-05-21 72 views
13

AngularJS site上的Cookbook表單示例僅保存客戶端上的狀態。我如何提交給服務器?AngularJS - 如何向服務器上的控制器提交表單?

或者,我如何在ng:click="save()"函數的窗體上使用jQuery的form.submit()

編輯 - 找到2點的方式來做到這一點(我也刪除HTML標記之前我貼 - 只是指的是高級形式食譜例如對於源)

  1. http://webpac2.rot13.org:3000/conference/Work(由多布里察Pavlinusic)去AngularJS使用資源將數據以JSON格式發送到服務器。我在服務器端遇到了一些問題 - AngularJS發送的很好,但是grails正在修改它(根據firebug和請求內容的長度)。我需要更多地考慮這一點。如何更改資源方法(如$save())的角度內容類型?

  2. 將表單放入並使用提交按鈕。由於我沒有做單頁網頁應用程序,所以我使用了這種方法。大部分的驗證都在客戶端上,而在服務器上多一些對我來說已經足夠了。

只是把這個放在這裏,讓其他人可以使用這個可能的解決方案和最好的方法。

+0

你能告訴你當前的標記和代碼?重新你的PS:這可能是一樣糟糕,因爲它可能是好的... – 2011-05-21 14:57:16

+0

@marcel - 沒有渲染我的複製粘貼正確。我希望你能從中理解。感謝您的幫助 – 2011-05-21 15:06:47

+0

您可以在發送給瀏覽器時使用HTML標記(使用'查看源代碼'),因此我們無需弄清楚生成的HTML會是什麼樣子。畢竟,這是JavaScript會看到的。 – 2011-05-21 16:26:05

回答

0

據我所知,沒有一個很好的方法來修改頭向角色發送到服務器的標頭,期望爲editing angular source。這是計劃的增強,但它還沒有完成。

我認爲angular google group可能是更好的地方來問這樣的具體問題,因爲開發人員非常友好和知識淵博。

12

注意,有視圖(你的HTML模板)和邏輯(你的JS代碼)的嚴格分離 - 這主要是因爲可測性。

正確的做法是隻送你的模型到服務器,使用$資源(用於REST)或低電平$ HTTP。而不是在模板中完成這項工作。

簡單的例子 - HTML模板

First: <input type="text" ng-model="person.first" /> 
Last: <input type="text" ng-model="person.last" /> 
<button ng:click="save()">Save</button> 

的JavaScript - 控制器

function FormCntl($scope, $http) { 
    $scope.save = function() { 
    $http.put('/save.py', $scope.person); 
    }; 
} 
+0

如果我使用'this.save = function ...',那是行不通的。我必須在控制器中使用'$ scope.save = function ...'。 – Voles 2012-09-10 10:11:03

+2

@Voles謝謝,更新到當前v1語法(答案是用0.9。*語法編寫的) – Vojta 2012-09-11 07:09:58

+0

當我在服務器端轉儲請求時沒有提交任何內容。它是一個空數組:'Log :: write(print_r($ _ REQUEST,true))' – Michelle 2012-09-13 09:12:33

相關問題