[英]How to access FormController created dynamically?
我有一系列項目。 每個項目將通過使用ng-repeat
和ng-form
動態關聯到一個ng-form
。
<div ng-repeat="person in people" ng-form="person.$form">
...
</div>
然后我有可能創建新項目。 但是當我這樣做時,我希望他們的新形式變臟。
<button type="button" ng-click="addPerson()">ADD NEW ONE...</button>
在控制器中:
$scope.addPerson = function() {
var p = {
name: 'Charles',
color: 'green'
};
$scope.people.push(p);
p.$form.$setDirty(); // <----- THIS WON'T WORK
};
正如上面的評論所寫的,這行不通。 它嘗試在FormController創建之前執行該指令。
到目前為止,我無法為此找到任何解決方案,也無法在這里找到完全相關的回答問題。
這是此示例的 Plunker,其中包含一些按鈕和標簽,可用於處理臟和原始狀態。
創建一個自定義指令來初始化表單:
app.directive("initForm", function() {
return {
link: postLink,
require: 'form'
}
function postLink(scope,elem,attrs,form) {
form.$setDirty();
}
})
並在 HTML 中使用它:
<div ng-repeat="person in people" init-form ng-form="person.$form">
...
</div>
angular.module('app', []) .controller('MainCtrl', function($scope) { $scope.people = [ {name: 'Alice', color: 'pink' }, {name: 'Bob', color: 'blue' } ]; $scope.addPerson = function() { var p = { name: 'Charles', color: 'green' }; $scope.people.push(p); //p.$form.$setDirty(); }; }) .directive("initForm", function() { return { link: postLink, require: 'form' } function postLink(scope,elem,attrs,form) { form.$setDirty(); } })
.ng-pristine { background-color: #E0F8F7; } .ng-dirty { background-color: #F5A9BC; } .bigform.ng-pristine { background-color: #5882FA; } .bigform.ng-dirty { background-color: #FF0040; } .bigform { padding: 20px; }
<script src="//unpkg.com/angular/angular.js"></script> <body ng-app="app" ng-controller="MainCtrl"> <div ng-form="mainForm" class="bigform"> <div ng-repeat="person in people" init-form ng-form="person.$form"> <p>{{personIndex}}</p> <input type="text" ng-model="person.name" /> <input type="text" ng-model="person.color" /> <button type="button" ng-click="person.$form.$setPristine()">RE-PRISTINATE</button> <label>form is <span ng-show="person.$form.$dirty">dirty</span><span ng-show="person.$form.$pristine">pristine</span></label> <br /> </div> <br /> <br /> <button type="button" ng-click="mainForm.$setPristine()">RELOAD</button> </div> <br /> <br /> <button type="button" ng-click="addPerson()">ADD NEW ONE...</button> </body>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.