私は、次のような形式があります選択し、デフォルトのオプションボックスを非同期にロードされているNG-無効
<form name="editUserForm" ng-cloak="">
<md-input-container layout-margin>
<label>Available Groups</label>
<md-select id="groups" ng-model="vm.selectedGroup" ng-model-options="{ trackBy: '$value.id' }" md-on-close="vm.clearGroupSearchTerm()"
data-md-container-class="selectdemoSelectHeader" multiple required>
<md-select-header class="demo-select-header">
<input id="searchGroup" ng-model="vm.groupSearchTerm" type="search" placeholder="Search available groups" class="demo-header-searchbox md-text"
ng-keydown="$event.stopPropagation()">
</md-select-header>
<md-optgroup label="Groups">
<md-option ng-value="group" ng-repeat="group in vm.groups |filter:vm.groupSearchTerm">{{group.name}}</md-option>
</md-optgroup>
</md-select>
</md-input-container>
<div layout="row" layout-align="end">
<md-button id="buttonCancel" class="md-raised md-primary" ui-sref="search.users" type="submit">Cancel</md-button>
<md-button id="buttonSave" class="md-raised md-primary" ng-disabled="editUserForm.$invalid" ng-click="vm.addOrUpdateUser()"
type="submit">Save</md-button>
</div>
</div>
</div>
</form>
:
/* @ngInject */
function UserController($scope, $state, $stateParams, $element,
usersService, groupsService, groupNameRegex, logger) {
var vm = this;
editUser()
function editUser() {
usersService.getUser($stateParams.userId).
then(function (data) {
vm.user = data;
for (var i = 0; i < data.userGroups.length; i++) {
vm.selectedGroup.push(data.userGroups[i].group);
}
// vm.selectedGroup = [{ id: 101, name: 'group1' }];
});
}
...
問題はフォームがレンダリングされるときに、 'vm.selectedGroup'モデルが正しく読み込まれて表示されていても '保存'ボタンが無効になっていることです。結果をハードコードすると、すべて正常に動作します。 約束が返される前に、入力オプションを評価するための 'required'プロパティのように見えます。 非同期呼び出しの「必須」プロパティは、最初にオプションを選択した後にのみ評価されることもあります。
私の質問は、 '$ invalid' 'required'を 'md-select'要素に対して非同期に読み込まれるデフォルト値で使用する正しい方法です。
「// vm.selectedGroup = [{id:101、name: 'group1'}];を設定すると分かります。 – lealceldeiro
それは正しいです。 – Cyril