Я написал директиву, которая отображает одну кнопку для каждого продукта, переданного в директиву. Продукт также должен быть передан функции subscribe
директивы при нажатии кнопки.Директива AngularJS Передача параметров изолированной функции области
Проблема заключается в том, что параметр не передается функции.
директива
directives.directive('subscriptionItem', function() {
return {
scope: {
// Two way binding, = is equivalent to '=activeSubscription'
activeSubscription: '=',
products: '=',
googleLogin: '&',
subscribe: '&'
},
restrict: 'E',
replace: 'true',
templateUrl: 'common/directives/subscription-item.tpl.html'
};
});
Шаблон
<div>
<ion-item class="item-text-wrap">
<h2>{{activeSubscription.status}} - {{activeSubscription.action}}</h2>
<p>{{activeSubscription.description}}</p>
</ion-item>
<ion-item ng-repeat="product in products" class="item-text-wrap" ng-if="activeSubscription.action === 'PAID'">
<h2>{{product.title | limitTo: product.title.length - 21}}</h2>
<p>{{product.description}}</p>
<button class="button button-block button-positive" ng-click="subscribe(product.productId)">
Buy for {{product.price}} - {{product.productId}}
</button>
</ion-item>
</div>
product.productId
правильно отображается, но не передается функции.
Использование директивы
<subscription-item active-subscription="activeSubscription" products="products" google-login="googleLogin()" subscribe="subscribe(sku)"></subscription-item>
подписываться функцию в рамках родительского контроллера
$scope.subscribe = function (sku) {
console.log('subscribe ' + sku)
InAppBillingService.subscribe(sku)
.then(function() {
console.log('Success');
})
.catch(function (error) {
$cordovaToast.showLongBottom(error);
});
}
Это то, что я получаю в журнале: 'Object {Код: не определено}'. 'product.productId', похоже, не интерпретируется. Используя метод Джо, он работает. – Sydney
Я подтвердил, что мое решение сработало [в этом Plunkr] (http://plnkr.co/edit/nIllV554pHMBlqzAV6Pd?p=preview). Я пробовал как с AngularJS версии 1.3.14, так и с версией 1.4.0-beta.5. Дважды проверьте, что вы внесли все изменения, которые я предложил, и что вы используете отдельные фигурные скобки, а не двойные внутри выражения 'ng-click'. – GregL
Я ошибся, что он работает – Sydney