Я сделал один сниженный snippet моей проблемы. На самом деле я делаю приложение с использованием ионных, но это не имеет значения, проблема возникает и в плунжере.Угловое свойство boolean не обновляет внешнюю директиву
Я также прочитал это answer и обновил некоторые из моего кода, но проблема не устранена.
У меня есть этот контроллер с object
:
app.controller('myCtrl', function($scope) {
$scope.object = {
boolean: true,
btn1: 'Do it be TRUE',
btn2: 'Do it be FALSE'
}
})
И я хочу, чтобы изменить его свойство boolean
внутри этой директивы:
.directive('myDirective', function() {
return {
template: '<button class="btn btn-default">{{$obj.btn1}}</button>'
+ ' <button class="btn btn-default">{{$obj.btn2}}</button>',
restrict: 'A',
scope: { $obj: '=myDirective' },
link: function(scope, element, attrs) {
var listener = scope.$watch('$obj', function() {
if (scope.$obj) listener();
else return;
var buttons = element.find('button'),
btn1 = buttons.first(),
btn2 = buttons.last();
if(scope.$obj.boolean){
btn1.addClass('selected');
$('#Log').html('true');
}else {
btn2.addClass('selected');
$('#Log').html('false');
}
buttons.on('click', function(){
buttons.removeClass('selected');
$(this).addClass('selected');
var isTrue = this === btn1[0];
$('#Log').html(String(isTrue)); // works
scope.$obj.boolean = isTrue; // does not works
});
});
}
}
});
Как вы можете увидеть во время работы plunker, угловой журнал не обновляется, как jQuery, и я даю одинаковое значение.
Я борюсь с этим по часам, любая помощь будет действительно восприимчивой, спасибо за ваше время.
Как уже было сказано, вы должны ДЕЙСТВИТЕЛЬНО использовать ng-click для этого и задавать переменную Angular в области видимости, поэтому вам не нужно обладать. $ Apply(). –
@ChrisStanley. Вы имеете в виду 'ng-click' в шаблоне и' scope.myFunction' в директиве, правильно? Я думал, что изменение значения в директиве было бы лучше, потому что на самом деле у меня есть четыре страницы, которым нужна эта директива, тогда я могу объявить эту функцию только один раз внутри директивы. Какая была бы лучшая практика для этого случая? –