2017-11-11 2 views
0

저는 AngularJS의 초보자이며 제목 문제를 해결할 수 없습니다. 다음 코드에서 changeText 버튼을 누르면 텍스트 영역의 텍스트가 변경됩니다. 그러나 다른 버튼 addNewButton을 눌러 추가 된 버튼 changeTextNew을 누르면이 이벤트가 발생하지 않습니다.추가 된 항목에 angularJS 이벤트를 호출하는 방법은 무엇입니까?

HTML

<div ng-app="app" ng-controller="MainCtrl"> 
<input name="widget.title" ng-model="widget.title"><br> 
<input type="button" ng-click="setText()" value="changeText"><br> 


<input type="button" id="piyo" value="addNewButton"> 
<div id="fuga"></div> 
</div> 

JS

angular.module('app', []) 
    .controller('MainCtrl', function($scope) { 
     $scope.widget = { title: 'before' }; 

     $scope.setText = function() { 
      this.widget.title = "after" 
     } 
    }); 

$(document).on('click', '#piyo', function() { 
    $('#fuga').append("<input type='button' ng-click='setText()' value='changeTextNew'><br>") 
}) 

https://jsfiddle.net/sn512/guqjatt6/

+1

있습니까? – ChaseHardin

답변

0

봅니다 AngularJS와 함께 jQuery를 사용하여 방지 할 수 있습니다.

이를 시도해보십시오`addNewButton`에 대한 당신이 'NG-click`를 사용하지 않는 이유가

angular.module('app', []) 
 
    .controller('MainCtrl', function($scope, $compile) { 
 
     $scope.widget = { title: 'before' }; 
 

 
     $scope.setText = function() { 
 
      this.widget.title = "after" 
 
     } 
 
     
 
     $(document).on('click', '#piyo', function() { 
 
      $("#fuga").append($compile("<input type='button' ng-click='setText()' value='changeTextNew'><br>")($scope)); 
 
     }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="app" ng-controller="MainCtrl"> 
 
    <input name="widget.title" ng-model="widget.title"><br> 
 
    <input type="button" ng-click="setText()" value="changeText"><br> 
 

 
    <input type="button" id="piyo" value="addNewButton"> 
 
    <div id="fuga"></div> 
 
</div>

+0

불행히도 현재의 자바 스크립트 코드는 많은 jQuery 표현식으로 작성되었습니다. AngularJS를 특정 용도 (사용자 정의 유효성 검사기)로 사용하기를 원하며 모든 것을 다시 쓰고 싶지는 않습니다. 특히, 다음 행을 삭제하는 것은 어렵습니다 : '$ (document) .on ('click', '#piyo', function() { \t $ ('# fuga'). append ("
") 그런 경우 AngularJS를 포기해야합니까? – Saga873

+0

이 경우 HTML 문자열을 각도 함수로 DOM에 삽입하기 전에 "컴파일"해야합니다. 이를 위해서는 [$ compile] (https://docs.angularjs.org/api/ng/service/$compile) 서비스를 사용해야합니다. jsFiddle을 업데이트했습니다. –

+1

감사합니다. 이것은 많은 도움이됩니다. – Saga873

관련 문제