私は自分の道を探しましたが、これを理解することはできません。manyToOneSelect
サーバーからアイテムをロードしてユーザーに表示し、ユーザーがアイテムを選択できるようにするディレクティブ(カスタムコンポーネント)を作成しました。それはうまくいきますが、ユーザーがアイテムを選択しなかった場合にフォームが送信されないようにする方法、つまりフォームを無効にする方法がわかりません。
以下はほとんど指令です:
angular.module('myApp.directives').
directive('manyToOneSelect', function(entityService) {
return {
restrict:'E',
templateUrl:'partials/control/n21select.html',
scope:{
entityName:'@',
entityField:'@',
bindVariable:'='
},
compile:function (tElement, tAttrs, transclude) {
return function (scope, element, attrs) {
var inner = element.children("#n21select");
scope.entities = [];
scope.$watch('entityName', function ($new, $old) {
entityService.getList(scope.entityName, function (data) {
scope.entities = data;
}, []);
}, true);
scope.lookup = function(uuid) {
for(var i in scope.entities) {
if(scope.entities[i].uuid == uuid) {
return scope.entities[i];
}}}}}}});
これが対応する部分partials/control/n21select.html
です:
<select ng-hide="disable" ng-options="entity.uuid as entity[entityField] for entity in entities" ng-model="bindVariable" required></select>
<span ng-show="disable">{{lookup(bindVariable)[entityField]}}</span>
ディレクティブの使用方法は次のとおりです。
<form ng-href="#/" ng-submit="save()">
<many-to-one-select entity-name="customer" entity-field="name"
bind-variable="entity.customerUuid"></many-to-one-select>
...
私の問題は、「完全に機能するわけではない」というよりも、戦略が不足しているように思われるため、上記のコードでは何の試みも見られません。それでは、これをかなりオープンな質問にしましょう:それをどのように行うのですか?:)すでに大いに感謝しています!