I wrote a custom directive to implement a button toggle. Когда я взаимодействую с кнопкой и подтверждаю, что хочу ее переключить, я получаю Uncaught Reference Error: on is not defined
. Я думал, что я определил on
как атрибут HTML в пользовательском элементе <button-toggle></button-toggle>
. Причина моей озабоченности в том, что я могу отправить на сервер значение on
или off
. Где я иду не так?AngularJS: Пользовательская директива HTML-атрибут 'не определен'
buttonToggle.html
<div class="btn-group btn-toggle">
<button class="btn btn-sm" ng-class="{'btn-success':on, 'btn-default':!on}">ON</button>
<button class="btn btn-sm" ng-class="{'btn-danger':off, 'btn-default':!off}">OFF</button>
</div>
buttonToggle.js
angular
.module('myApp')
.directive('buttonToggle', buttonToggle);
function buttonToggle() {
function link(scope, elm, attr, ctrl){
angular.element(elm).on('click', function(){
var confirmResponse = (window.confirm("Are you sure?") === true);
if(confirmResponse) {
scope.on = !scope.on;
scope.off = !scope.off;
scope.$digest();
if(on)
return off;
else if(off)
return on;
}
scope.$digest();
});
}
var directive = {
restrict: 'AE',
link: link,
replace: true,
templateUrl: 'buttonToggle.html',
scope: {
on: "=",
off: "="
}
};
return directive;
}
buttonToggleCtrl.js
angular.module('myApp').controller('buttonToggleCtrl', buttonToggleCtrl);
function buttonToggleCtrl($scope) {
$scope.activeOn = true;
$scope.activeOff = false;
}
index.html фрагмент
<button-toggle on="activeOn" off="activeOff"></button-toggle>
Как примечание, не беспокойтесь о том, как сейчас кнопка выглядит. Я знаю, что это испортилось в plnkr, но в моем приложении это выглядит хорошо, так как я использую Bootstrap там, а не в plnkr. Обратите внимание на ошибку, возникающую в консоли JavaScript.
Не нужно обертывать 'elm' в' angleular.element() '... это уже сделано при передаче в' link'. Может просто сделать 'elm.on ('click' ..' – charlietfl
также не имеет смысла переключать 2 булевых переменных, когда требуется только один – charlietfl
@charlietfl. И те и другие имеют смысл, я обязательно их поменю. – UltraSonja