2
私はフィールドがfield
というディレクティブによって動的に生成される単純なフォームを持っています。私が提出すると、フィールドが検証され、ng-invalid
、ng-invalid-email
などの有効なクラス名が生成されます。しかし、フォームのクラス名は常にng-valid
です。どんな助けでも大歓迎です!
HTML
<body ng-controller="app_controller">
<form name="register" ng-submit="register_user()" novalidate>
<table>
<tr>
<td>Username: </td>
<td><field name="username" value="info"></field></td>
</tr>
<tr>
<td>Email: </td>
<td><field name="email" value="info"></field></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="submit" ng-disabled="register.$invalid" /></td>
</tr>
</table>
Invalid: {{ register.$invalid }} <br />
valid: {{ register.$valid }}
</form>
JS
var app = angular.module('app', []);
app.controller('app_controller', function($rootScope, $scope) {
$scope.info = {
username: '',
email: ''
};
$rootScope.meta = {
"username": {
type: "STRING",
length: 255
},
"email": {
type: "EMAIL",
length: 255
}
};
});
app.directive('field', function($rootScope, $compile) {
return {
restrict: 'E',
scope: {
value: '='
},
link: function($scope, $element, $attrs) {
$scope.field_name = $attrs.name;
$scope.required = true;
console.log($scope);
var prepare_fields = function() {
if ($rootScope.meta) {
$scope.field = angular.copy($rootScope.meta[$attrs.name]);
}
var html = '';
if ($scope.field.type === "STRING") {
html = '<input type="text" name="' +$scope.field_name+ '" ng-model="value[field_name]" ng-required="required" />';
} else if ($scope.field.type === "EMAIL") {
html = '<input type="email" name="' +$scope.field_name+ '" ng-model="value[field_name]" ng-required="required" />';
}
$element.html($compile(html)($scope));
};
$rootScope.$watch('meta', prepare_fields);
}
}
});
恐ろしい!私は完全にその部分を逃した:) – moustacheman