доступ к глобальной области действия вне среды пользовательских директив angularjs

#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, но я не знаю