質問:性別に応じて正しいオプションを選択する方法を教えてください。Angularjs指令で正しいオプションが選択されていません
1)ページ上に複数の選択肢があるように、指示に情報を入れようとしています。これは性別の値を読み取ります。その人がどの性別を持っているかを知る前に、指示が読み込まれていたので、そこにng-ifを置いた。 (これを処理するより良い方法があるかもしれません)
MarkUP
<label>Gender:</label>
<directive-dropdown ng-if="$ctrl.PersonOC.GENDER" id="ddlGender" entity-name="GENDER" dd-value="true" selected-value="{{$ctrl.PersonOC.GENDER}}"></directive-dropdown>
2)私はこの指示をサービスから読みます。しかし、私はどのように 'M'を選択するのか分からない。
Directive
var dropdownApp = angular.module('dropdownApp', ['core.pvms']);
dropdownApp.directive('directiveDropdown', function() {
return {
restrict: 'E',
scope: {
entityName: '@',
ddValue: '@',
selectedValue: '@',
ngModel: '='
}
,template: '<select ng-model="selectedOption" ng-options="option.DROP_DOWN_VALUE for option in pvmsOptions track by option.CD">' +
'<option value="">-- select one --</option></select>'
,replace: true
,controller: ['$scope', 'pvmsService', function ($scope, pvmsService) {
var paramsObj = {};
paramsObj.entityName = $scope.entityName;
paramsObj.ddValue = $scope.ddValue;
$scope.pvmsOptions = pvmsService.query(paramsObj);
if ($scope.ngModel != '') {
$scope.ngModel = $scope.selectedValue;
}
} ]
,link: function ($scope, element, attrs) {
$scope.ngModel = $scope.selectedValue;
}
};
});
3)あなたは、あなたがngModelController
へのアクセスを得るためにあなたの指示にrequire: 'ngModel'
を使用することができるのではなく「男性」
Rendered Html
<select ng-model="selectedOption" ng-options="option.DROP_DOWN_VALUE for option in pvmsOptions track by option.CD"
ng-if="$ctrl.PersonOC.GENDER" id="ddlGender" entity-name="GENDER" dd-value="true" selected-value="M"
class="ng-pristine ng-untouched ng-valid ng-scope ng-isolate-scope ng-empty">
<option value="" class="" selected="selected">-- select one --</option>
<option label="FEMALE " value="F">FEMALE </option>
<option label="MALE " value="M">MALE </option>
</select>
ModelCtrlはどのように 'コントローラ'セクションで参照されますか?これらのどちらも機能しません。 TypeError:$ scope.ngModel。$ setViewValueは関数またはReferenceErrorではありません。ngModelCtrlは定義されていません。 ngModelCtrl。$ setViewValue($ scope.selectedValue);ngModelCtrl。$ commitViewValue(); //または $ scope.ngModel。$ setViewValue($ scope.selectedValue);$ scope.ngModel。$ commitViewValue(); – gman
ああ、申し訳ありませんが、ディレクティブのリンク機能を使用して、*必須の* ModelCtrlをディレクティブ自身のコントローラで使用できるようにする必要があります。最も簡単なのは '$ scope'に公開することです。もう1つの方法は、ディレクティブがそれ自身とngModelの両方を要求し、リンクからコントローラに渡す 'setModelController'関数をリグアップすることです。私は最初の方法で私の答えを更新しました。 – plong0