#javascript #angularjs #ng-show #ng-hide
#javascript #angularjs #ng-показать #ng-скрыть
Вопрос:
итак, вот пример кода моих пользовательских директив
myApp.directive('anchorLink', function () {
return {
restrict: 'EA',
link: function (scope, elem, attr) {
elem.on('click', function () {
scope.show = true;
});
}
};
});
и вот моя HTML-разметка
<a href="javascript:;" anchor-link>click me</a>
<div ng-show='show'>show me</div>
<div ng-hide='show'>hide me</div>
как вы можете видеть, я хочу манипулировать $scope.показать вне среды пользовательских директив, но это не сработало .. вы можете мне помочь?
Ответ №1:
Вы можете либо сделать это:
<a href="javascript:;" ng-click="show=true">click me</a>
<div ng-show='show'>show me</div>
<div ng-hide='show'>hide me</div>
или:
myApp.directive('anchorLink', function () {
return {
restrict: 'EA',
link: function (scope, elem, attr) {
elem.on('click', function () {
scope.$apply(function (){
scope.show = true;
});
});
}
};
});
Если единственной целью вашей директивы является привязка обработчика щелчков, вам не нужна директива для этого, поскольку вы можете просто использовать ng-click.
Рабочий plnkr второго варианта: plnkr
Комментарии:
1. ну, на самом деле я хочу манипулировать DOM, поэтому я использую пользовательские директивы, кстати, я пытался использовать scope.$apply, и он говорит, что ошибка $ digest уже выполняется?
2. Хм, вы тоже добавили ng-click? это должно быть либо одно, либо другое. Также используйте двойные кавычки в ng-show / ng-hide вместо одинарных кавычек.
3. Я использую второй метод, хотя все еще использую пользовательские директивы вместо передачи ng-click в контроллеры.. да, я использую двойные кавычки вместо одинарных кавычек.. есть ли что-то, чего мне не хватает?
4. Посмотрите на plnkr, который я добавил. Это работает просто отлично, у вас должен быть какой-то другой код, который вызывает ошибку.
5. Я заметил, что версия angularjs, которую вы использовали, 1.3.0, в то время как я использую 1.0.7, влияет ли на это версия angularjs? и я попробовал ваш plunkr, но он не переключается, просто манипулируя поведением ng-show, но я не знаю