2015-04-30 3 views
2

Всякий раз, когда я удаляю элемент dom, который предшествует элементу с указанным атрибутом ng-click, он больше не будет вызывать функцию, которую ссылаются на ссылки ng-click.ng-click больше не вызывает функцию после удаления элемента dom.

Вот пример этого не работает. Примечание: если вы измените if (true) на if (false) и нажмите «Сохранить», он правильно вызовет функцию.

function MainCtrl($scope) { 
 
    $scope.submit = function() { 
 
     alert('submitted'); 
 
    } 
 
    
 
    function load() { 
 
     if(true){ 
 
      $('#resetPassword').remove();  
 
     } 
 
    } 
 
    
 
    load(); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div ng-app> 
 
    <div ng-controller="MainCtrl"> 
 
     <div class="btn-group m-b-20 pull-right" role="group"> 
 
      <button type="button" id="resetPassword" class="btn btn-success">Reset Password</button> 
 
      <button type="button" class="btn btn-success" ng-click="submit();">Save</button> 
 
     </div> 
 
    </div> 
 
</div>

+3

Я не знаю, почему это происходит, но вы не должны использовать jQuery. Используйте 'ng-if', чтобы скрыть или показать кнопку при условии. Это способ пойти с Угловым. jQuery 'remove' здесь выглядит грязным. –

+1

Правильный способ сделать это - написать директиву и применить ее к элементу, который вы хотите удалить. jQuery - зло в Угловых контроллерах. – Billy

+0

@Jeremy Если я скрою/покажу, что css не работает должным образом, поскольку он ищет первый элемент в dom, поэтому мне действительно нужно удалить его из dom. – Alex

ответ

3

Я не знаю, почему это происходит, но вы не должны использовать JQuery. Используйте ng-if, чтобы добавить или удалить кнопку при условии. Это способ пойти с Угловым. jQuery's remove здесь выглядит грязным. ng-show просто показать или скрыть, но ng-ifдобавляет или удаляет элемент из DOM. Это то, что вы хотите, и, безусловно, самое простое решение.

1

Вы должны попытаться сделать это с пользовательской директивы. Например:

JS

app.directive("removeClick", function() { 
     return { 
      link:function(scope,element,attrs) 
      { 
       element.bind("click",function() { 
        element.remove(); 
       }); 
      } 
     } 

}); 

HTML

<div ng-app> 
    <div ng-controller="MainCtrl"> 
     <div class="btn-group m-b-20 pull-right" role="group"> 
      <button type="button" id="resetPassword"class="btn btn-success">Reset Password</button> 
      <button remove-click type="button" class="btn btn-success" ng-click="submit();">Save</button> 
     </div> 
    </div> 
</div> 

Вы можете использовать getElementbyId в этот момент, хотя вы, вероятно, следует попытаться передать правильный элемент в вашей директиве. Это, вероятно, даст вам базовое понимание угловых указаний.

https://docs.angularjs.org/guide/directive

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