2016-12-08 85 views
0

全部,從角度控制器訪問動態命名的表單

我在Angular控制器內部有一個窗體。但該表單的名稱是由服務器動態生成的(由Django提供)。是否有人知道我如何訪問該表單(有意在某些與服務器進行交互之後更改某些項目的有效性)。

下面是一些代碼:

my_template.html:

<html> 
    <div ng-app="MyApp"> 
    <div ng-controller="MyController as my_controller"> 
     <form name={{ form.form_name }} 
     {% for field in form %} 
      {{ field }} 
     {% endfor %} 
     </form> 
     <button ng-click="do_something">do something</button> 
    </div> 
    </div> 
</html> 

my_view.py:

def my_view(request): 
    form = MyForm(form_name=generate_a_random_string()) 
    return render_to_template({"form":form} 
    return render_to_response('my_template.html', {"form": form}) 

my_app.js:

(function() { 
    var app = angular.module("MyApp"); 
    app.controller("MyController", ['$scope', function($scope) { 
     $scope.do_something = function() { 
     /* OBVIOUSLY THIS DOESN'T WORK */ 
     /* BUT WHAT DO I REPLACE "my_form" WITH ? */ 
     my_form['some_field_name'].$setValidity('some_validity_type', false); 
     my_form['some_field_name'].$setDirty(); 
     } 
    }]); 
}); 

如果有幫助,我使用django-angular來使我的Django表單很好地發揮w/Angular。

謝謝。

+0

不確定我的問題是否正確,您應該能夠從'$ scope.form.form_name'右邊獲取表單? – Developer

+0

不是。如果我嘗試獲取TypeError:無法讀取未定義的屬性'form_name'。我想我需要實際指定表單的名稱。 – trubliphone

+0

嘗試移除表單名稱的{{}}。只需將它作爲form.form_name,然後嘗試獲取它,如前所述 – Developer

回答

0

形式在

<form name="myForm"> 

的名稱將在你的控制器同名的NgFormController反映

myController.myForm 

我認爲問題的一部分是,你必須{{ form.form_name }}在你可以告訴我的模板沒有在控制器中初始化。 您可能需要首先在您的控制器中初始化您的表單名稱,然後使用ng-repeat構建表單DOM元素並從中取出名稱。然後,您可以在視圖控制器內使用this.form_name訪問NgFormController。

+0

雙括號來自Django。在「my_view.py」中,我將帶有form_name屬性的Django表單傳遞給「my_template.html」模板。不幸的是,Django和Angular對變量使用相同的語法。假設它是一個沒有被Angular計算出來的值。 – trubliphone

+0

所以一旦角度將模板鏈接到控制器,名稱屬性是什麼樣子的?我假設'name =「someName」'對嗎? – jusopi

+0

是的。 '

>'。 – trubliphone