AngularJS/Angular Material 表单有效性与 md-select
AngularJS/Angular Material form validity with md-select
我正在为正在构建的 Web 应用程序使用 AngularJS 和 Angular Material,并且在对话框 window 中有以下 HTML 表单:
<form name="cdc.clientForm">
<md-dialog class="userDialog" ng-init="cdc.init()">
<md-dialog-content>
<md-input-container flex>
<label>Company name</label>
<md-select ng-model="cdc.client.companyName" required>
<md-option value="Company 1">Company 1</md-option>
<md-option value="Company 2">Company 2</md-option>
</md-select>
</md-input-container>
<md-input-container>
<label>Client name</label>
<input type="text" ng-model="cdc.client.name" required>
</md-input-container>
</md-dialog-content>
<md-dialog-actions>
<md-button ng-click="cdc.submit()" ng-disabled="cdc.clientForm.$invalid">OK</md-button>
<md-button ng-click="cdc.cancel()">Cancel</md-button>
</md-dialog-actions>
</md-dialog>
</form>
我的背后有以下控制器:
(function () {
'use strict';
angular
.module('main')
.controller('ClientDialogController', ClientDialogController);
ClientDialogController.$inject = ['$mdDialog', 'client'];
function ClientDialogController($mdDialog, $q, client) {
var vm = this;
vm.init = init;
vm.submit = submit;
vm.cancel = cancel;
function init() {
if ((client !== undefined) && (client !== null)) {
vm.client = client;
}
};
function cancel() {
$mdDialog.cancel();
};
function submit() {
$mdDialog.hide(vm.client);
};
};
})();
我正在重复使用对话框来创建和更新我的模型。
我的问题主要在于编辑对象时的表单有效性。
如果我在表单中有一个 md-select,并且 md-select 是必需的并且它是原始的,例如,用户不会修改 select值,那么表单被认为是无效的。删除 select,只有带有绑定模型的文本输入,我没有问题,表单被认为是有效的。
我该如何解决这个问题,推荐的处理方法是什么?
好吧,这是我自己想出来的,也许它会对其他人有所帮助。
这个关键已经在"Selects and object equality"部分的docs里面了,只是没注意到,因为不是很明显。
问题在于 Javascript 检查相等性的方式,如果我按如下方式添加 ng-model-options 指令,表单将设置为有效:
<md-select ng-model="cdc.client.companyName" required ng-model-options="{trackBy: '$value'}">
<md-option value="Company 1">Company 1</md-option>
<md-option value="Company 2">Company 2</md-option>
</md-select>
我正在为正在构建的 Web 应用程序使用 AngularJS 和 Angular Material,并且在对话框 window 中有以下 HTML 表单:
<form name="cdc.clientForm">
<md-dialog class="userDialog" ng-init="cdc.init()">
<md-dialog-content>
<md-input-container flex>
<label>Company name</label>
<md-select ng-model="cdc.client.companyName" required>
<md-option value="Company 1">Company 1</md-option>
<md-option value="Company 2">Company 2</md-option>
</md-select>
</md-input-container>
<md-input-container>
<label>Client name</label>
<input type="text" ng-model="cdc.client.name" required>
</md-input-container>
</md-dialog-content>
<md-dialog-actions>
<md-button ng-click="cdc.submit()" ng-disabled="cdc.clientForm.$invalid">OK</md-button>
<md-button ng-click="cdc.cancel()">Cancel</md-button>
</md-dialog-actions>
</md-dialog>
</form>
我的背后有以下控制器:
(function () {
'use strict';
angular
.module('main')
.controller('ClientDialogController', ClientDialogController);
ClientDialogController.$inject = ['$mdDialog', 'client'];
function ClientDialogController($mdDialog, $q, client) {
var vm = this;
vm.init = init;
vm.submit = submit;
vm.cancel = cancel;
function init() {
if ((client !== undefined) && (client !== null)) {
vm.client = client;
}
};
function cancel() {
$mdDialog.cancel();
};
function submit() {
$mdDialog.hide(vm.client);
};
};
})();
我正在重复使用对话框来创建和更新我的模型。
我的问题主要在于编辑对象时的表单有效性。
如果我在表单中有一个 md-select,并且 md-select 是必需的并且它是原始的,例如,用户不会修改 select值,那么表单被认为是无效的。删除 select,只有带有绑定模型的文本输入,我没有问题,表单被认为是有效的。
我该如何解决这个问题,推荐的处理方法是什么?
好吧,这是我自己想出来的,也许它会对其他人有所帮助。
这个关键已经在"Selects and object equality"部分的docs里面了,只是没注意到,因为不是很明显。
问题在于 Javascript 检查相等性的方式,如果我按如下方式添加 ng-model-options 指令,表单将设置为有效:
<md-select ng-model="cdc.client.companyName" required ng-model-options="{trackBy: '$value'}">
<md-option value="Company 1">Company 1</md-option>
<md-option value="Company 2">Company 2</md-option>
</md-select>