2015-12-21 2 views
1

Я просто ответил на вопрос здесь

How i send value when i click button to server and popup directive

Его код выглядел как этот

<div ng-controller="IndexController"> 
    <label id="number" >5</label> 
    <input type="button" ng-click="getUserDetails()" > 
</div> 

Он пытался получить доступ к элементу label с идентификатором #number.

Я понимаю, что в Angular DOM-манипуляции и запросы должны выполняться в пользовательской директиве, а не внутри контроллера. Поэтому я дал это решение.

Поскольку вы хотите получить доступ к значению числа, вы взаимодействуете с DOM. Лучшим решением для этого является создание пользовательских директив. Вот пример.

angular.module('myApp', []) 
    .directive('getValue', function({ 
     restrict: 'A', 
     link: function(scope, elem, attrs) { 
      elem.bind("click", function() { 
       scope.value = elem.prev().text(); 
      }); 

     } 
    }); 

Я знаю, что в link функции директивы, вы передать в области видимости, элементе и ATTRS как пары. В этой строке я пытаюсь установить переменную scope в значение метки.

scope.value = elem.prev().text(); 

Но у меня есть подозрение, что я не делаю это правильно. Поскольку директивы - это путь, как я могу это сделать.

Я также проверил это в качестве ссылки

Easiest way to pass an AngularJS scope variable from directive to controller?

Я читал о controller функции внутри директивы, но мне нужно link функцию для получения значения из DOM.

+0

Основная причина "ограничения DOM манипуляции с директивой", чтобы инкапсулировать изменения, что угловой не может реагировать. Чтение ценности на своем собственном не является чем-то, на что угловой должен реагировать. Кроме того, основная проблема в исходном вопросе, вероятно, может быть решена проактивно, предоставив ценность для создания DOM вместо того, чтобы активно пытаться божественное значение позже. Я тоже предложил что-то в этом вопросе. – Claies

ответ

0

Для этого не требуется специальная директива. ng-click может работать:

$scope.getUserDetails = function(e){ 
    $scope.value = e.target.previousElementSibling.innerHTML; 
} 

HTML

<div ng-controller="IndexController"> 
    <label id="number" >5</label> 
    <input type="button" ng-click="getUserDetails($event)" > 
</div> 

$event

+0

Тем не менее, из того, что я прочитал, что-либо, связанное с DOM, должно быть выполнено в пользовательской директиве –

+1

. Вы не получили бы многого из специальной директивы IMO. Если 'label' был частью настраиваемой директивы yes, вы инкапсулируете часть DOM в директиве. – MinusFour

Смежные вопросы