Я пытаюсь написать настраиваемую директиву, и одним из требований является то, что я должен иметь возможность отключить один из элементов на основе выражения, установленного в атрибуте директивы. Директива объявляется следующим образомКак смотреть и переоценивать выражение в директиве?
<sr-payment-edit payment="vm.paymentInfo" disablepaymenttypeselection="!vm.isPolicySelected || someOtherCondition">
В принципе, предполагается, что тип политики будет скрыт, если политика еще не выбрана. Как только политика будет выбрана, тип оплаты будет включен. Вот HTML шаблон для той части директивы
<div class="row" data-ng-hide='hidePaymentType'>
<div class="col-xs-12 p-l-0 p-r-0">
<div class="col-xs-3">
<div class="form-group">
<label>Payment Type:</label>
<select data-ng-model="payment.paymentTypeCode"
data-ng-disabled="disablePaymentType" class="form-control" style="width: 150px">
<option value="CASH">Cash</option>
<option value="CHCK">Check</option>
<option value="CCPP">Credit Card - Pre Pay</option>
<option value="MNOD">Money Order</option>
</select>
</div>
</div>
</div>
</div>
Вот директива код, на ранних стадиях
(function (angular) {
'use strict';
angular.module('app').directive('srPaymentEdit', srPaymentEditDirectiveFactory);
function srPaymentEditDirectiveFactory() {
return {
restrict: 'E',
templateUrl: 'app/app_directives/sr-paymentEdit/sr-paymentEdit.html',
scope: {
payment: '=',
disablepaymenttypeselection: '@',
hidepaymenttypeselection: '@'
},
transclude: false,
controller: controller,
link: link
};
}
function link($scope, element, attrs, model) {
if (attrs.hidepaymenttypeselection) {
$scope.hidePaymentType = $scope.$eval(attrs.hidepaymenttypeselection);
}
if (attrs.disablepaymenttypeselection) {
$scope.$watch(attrs.disablepaymenttypeselection, function (value) {
$scope.disablePaymentType = $scope.$eval(attrs.disablepaymenttypeselection);
});
}
}
function controller($scope) {
if ($scope.payment != null) {
if ($scope.payment instanceof PaymentInfo === false) {
throw 'Invalid datasource type, must be instance of PaymentInfo';
}
} else {
var info = new PaymentInfo();
info.paymentTypeCode = 'CHCK';
$scope.payment = info;
}
}
})(angular);
До сих пор так хорошо, смотреть пожары и отключает выбор, но после того, как «vm.isPolicySelected «Изменения, естественно, следите за тем, чтобы атрибут не срабатывал.
Можно ли запускать часы так, чтобы «disablepaymenttypeselection» пересматривалась?
Вы близки, но это не будет работать, так как он изолирован область, а «ВМ» не передается в сферу, так что «vm.isPolicySelected» не может быть должным образом оценены. – epitka
проверить демо. Я тестировал свой подход, похоже, что он работает: http://plnkr.co/edit/OFRrH7NqZZQhy0DkPmZ3?p=preview – dfsq
Спасибо, что поместили демонстрацию вместе, но я вижу, что флаг меняется с true на false, но я я все еще могу щелкнуть и открыть выбор типа оплаты, эта часть никогда не меняется для меня. Я использую Chrome. – epitka