0

我有一个用户可以选择编辑的信用卡列表。信用卡表单绑定到列表,如果他们在给定的卡上选择编辑,则会显示该表单。信用卡表格是自定义指令。用户还可以添加新卡。如果信用卡表格可见,则通常的字段是必需的,但如果不可见,则不应要求/验证。可见性由 ng-show 管理。

这是指令用法的简化版本。该指令本身就像您期望的那样简单。

<div data-ng-repeat="profile in paymentProfiles" data-ng-show="profile.PaymentProfileGuid == SelectedPaymentProfile && options.enableCreditCardEdit">
    <creditcard-widget title="Enter your Card Information" 
          card="profile" isrequired="profile.PaymentProfileGuid == SelectedPaymentProfile && options.enableCreditCardEdit"></creditcard-widget>
</div>

我尝试以双向、单向和文本方式绑定 isrequired。它仅作为文本起作用,并且仅当我传递一个值而不是表达式时。如何将标志传递给至少是单向数据绑定的指令?

编辑 我试过用“@”、“&”和“=”传递参数。我正在尝试减少足够的内容以发布 jsfiddle 或 plukr 链接。这是指令js:

.directive('creditcardWidget', function () {
    return {
        controller: 'CreditcardWidgetController',
        restrict: 'E, A',
        templateUrl: '/app/views/partials/creditcardWidget.html',
        scope: {
            card: "=card",
            types: "=",
            months: "=months",
            years: "=years",
            title: "@",
            opt: "&",
            prefix: "@",
            isrequired: "&"
        }
    };
});

编辑 2

这是一个简化的plnkr

4

1 回答 1

0

这是一个使用&. 看看有什么与你所拥有的不同。

app.directive('creditcardWidget', function () {
    return {
        restrict: 'EA',
        template: '<div>isrequired={{isrequired()}}</div>',
        scope: {
            // ...
            isrequired: "&"
        },
        link: function(scope, element, attrs) {
            console.log('link: isrequired=', scope.isrequired());
        }
    };
});

function MyCtrl($scope) {
    $scope.paymentProfiles = [
       { PaymentProfileGuid: 22}
    ];
    $scope.SelectedPaymentProfile = 22;
    $scope.options = {enableCreditCardEdit: true};
}
于 2013-08-16T19:39:27.147 回答