選択に追加するだけng-required
です。モデルに初期値がない場合、空のオプションが追加され、有効な値に変更すると空のオプションが削除されます
jsFiddleを 編集して、以前の値に戻し、ng-changeディレクティブを含めます。
ドキュメントから:
値の変更がモデルからのものである場合、式は評価されません。
$apply
これは、変更リスナーに干渉せず、関数で古い値を元に戻すときに無限ループを作成するのに役立ちます
コントローラ
$scope.options = [{value: 'abc'},{value: 'def'}];
var confirmDialog = function(newVal, yes, no) {
// obviously not a good way to ask for the user to confirm
// replace this with a non blocking dialog
//the timeout is only for the confirm since it's blocking the angular $digest
setTimeout(function() {
c = confirm('Is it ok? [' + newVal.value + ']');
if(c) {
yes();
}
else {
no();
}
}, 0);
};
//Asking for confirmation example
function Ctrl($scope) {
$scope.options = [{value: 'abc'},{value: 'def'}];
$scope.select = undefined;
var oldSelect = undefined;
$scope.confirmChange = function(select) {
if(oldSelect) {
confirmDialog(select,
function() {
oldSelect = select;
},
function() {
$scope.$apply(function() {$scope.select = oldSelect;});
});
}
else {
oldSelect = select;
}
}
}
テンプレート
<div ng-controller="Ctrl">
<select ng-model="select" ng-options="o.value for o in options"
ng-required ng-change="confirmChange(select)">
</select>
</div>