2017-09-20 10 views
0

입력 필드에 버튼을 추가 할 수있는 지시문과 다른 기능을 작성해야합니다. 그래서, 이상적으로 나는 끝나게이AngularJS 지시문을 사용하여 입력 필드에 버튼을 추가하는 방법은 무엇입니까?

<input type="text" my-directive> 

같은 것을 갖고 싶어

<input type="text"><button ng-click="someAction()" ng-class="{'success': isSuccess()}" ng-disabled="isDisabled()">click me</button> 
내 지시어

단순화 된 코드 :

app.directive('myDirective', ['$q', '$timeout', function ($q, $timeout) { 
        return { 
        restrict: 'A', 
        template: '<button ng-click="someAction()" ng-class="{\'success\': isSuccess()}" ng-disabled="isDisabled()">click me</button>', 

        require: '?ngModel', 
        link: function (scope, element, attrs, ctrl) { 

         scope.isSuccess = function() { 
          ... 
         }; 

         scope.isPending = function() { 
          ... 
         }; 
         scope.someAction = function() { 
          ... 
         }; 


....}]); 

문제는 그 나는이를 추가하는 경우 지시문 템플릿의 버튼 내가 끝까지 <input><button></button></input>

입력 필드를 포함하는 지시문을 작성하는 것은 불행히도 나를위한 옵션이 아닙니다. 자세한 정보를 제공해야하는지 알려주세요.

+0

부모 더미 요소가있는'input' 및'button' 요소에 문제가 있습니까? '과 같은 지시어를 가진 요소는 내용을 안에 넣을 수 있다는 것을 의미합니다! –

+0

아쉽게도 기존 입력 필드는 모두 속성이 다르며 응용 프로그램 전체에서 사용되므로 모든 필드에 대해 동일한 입력 필드를 생성 할 수 없습니다 – Nat

답변

0

몇 가지 검색을 한 후에 해결책을 찾았습니다. 지시어의 링크 함수에서 요소를 컴파일하고 요소에 추가하여 요소를 추가 할 수 있습니다.

link: function (scope, element, attrs, ctrl) { 
        var tpl = <button ng-click="someAction()" ng-class="{\'success\': isSuccess()}" ng-disabled="isDisabled()">click me</button>'; 
        var el = $compile(tpl)(scope); 
        element.after(el); 
...}