2014-09-13 2 views
1

angular.js에 지시문을 정의했습니다. 그 지시어는 링크 함수와 컨트롤러 함수를 가지고 있으며 템플릿이 없으므로 모든 뷰가 링크 함수에서 생성됩니다. 링크 기능에서 나는 다음을하고있다.angular-js 지시문의 링크 함수에 지시문 작성

var button=angular.element("<a>"); 
button.addClass("ng-click: previousLink();"); 

//previousLink() is a function defined in the scope. 
//I am doing it like that, because before that one I attempted to do: 
//button.prop("ng-click", "previousLink()"); 
//button.text("Previous"); 
//but for some reason it was showing on html as <a>Next</a>, without adding the property. 

작동하지 않는다. 단추를 클릭하면 아무 것도하지 않습니다. 코드에서 링크 함수로 이것을 수행하는 대신 템플릿을 사용하여 링크 함수를 수행하면 작동합니다. 몇 가지 이유로 링크 함수에서 jquery를 사용하여 몇 가지 조작을해야합니다. 어떻게해야합니까? 어쨌든이 작업을 할 수 있습니까, 아니면 템플릿과 링크 기능을 모두 사용해야하고 거기에 물건을 결합해야합니까?

+0

'ng-click'은 마크 업에 클래스로 쓰여지지 않으므로 속성으로 쓰여집니다. 각도를 예상하는 방식으로 html을 조작하려는 경우'$ compile '을 사용해야합니다 – charlietfl

답변

1

당신은 같은 것을 사용하여 기존 코드를 따를 필요가 $compile를 사용하려면 : 당신이 동적하려면

$compile(button.contents())(scope); 

, 그렇게 같은 $watch 안에이 넣을 수 있습니다 :

link: function (scope, ele, attrs) { 
    scope.$watch(attrs.yourval, function(html) { 
    var button=angular.element("<a>"); 
    button.addClass("ng-click: previousLink();"); 
    $compile(button.contents())(scope); 
    }); 
} 

$compile은 정의한 html에 (매개 변수로 제공된) 범위를 첨부합니다. 이렇게하면 버튼 클릭이 제대로 작동합니다.

관련 문제