2014-12-12 20 views
6

tôi đã tạo ra một chỉ thị tùy chỉnh trong angularjs:Angularjs Tuỳ chỉnh Chỉ thị ng-click không làm việc

directives.directive('myTop',function($compile) { 
return { 
    restrict: 'E', 
    templateUrl: 'views/header.html', 
} 
}) 

đang Chỉ thị của:

<div class="my-header"> 
<button ng-click="alert('x')" class="fa fa-chevron-left"></button> 
<h1>SpeakZ</h1> 
</div> 

đối với một số lý do, ng-click doesen't cò.

Tôi đã tìm kiếm trên internet và thấy rằng biên dịch/liên kết là giải pháp cho vấn đề này, nhưng dường như tôi không thể đạt được giải pháp làm việc.

Tôi không sử dụng jquery ..

+2

cảnh báo không hoạt động bên trong 'ng-click' thay vào đó nó sẽ cho Kết' $ scope.alert' chức năng trong phạm vi –

+0

ban đầu Tôi đã thử đặt: $ location.path ('/') bên ng -click .. không làm việc –

+0

đó là '$ vị trí' không tồn tại trong' $ scope' – ryeballar

Trả lời

10

Bạn sẽ cần phải thêm một chức năng link định nghĩa chỉ thị để làm việc này. Vì vậy, về cơ bản,

var app = angular.module("myApp", []) 

app.directive('myTop',function() { 
return { 
    restrict: 'E', 
    template: '<button ng-click="clickFunc()">CLICK</button>', 
    link: function (scope) { 
     scope.clickFunc = function() { 
      alert('Hello, world!'); 
     }; 
    } 
} 
}) 

Và html:

<div ng-app="myApp"> 
    <my-top></my-top> 
</div> 

Và đây là fiddle: http://jsfiddle.net/4otpd8ah/ liên kết

+0

Bạn có ý nghĩa gì bởi hàm gốc? – Ashesh

+0

ban đầu tôi đã thử đặt: $ location.path ('/') bên trong ng-click .. không hoạt động –

+1

Điều đó sẽ không hoạt động. Bạn nên có một hàm được định nghĩa trong phạm vi của chỉ thị (trong trường hợp phía trên scope.clickFunc) của nó, cái gì đó tùy thuộc vào những gì bạn cần. '$ location' cũng cần phải được đưa vào chỉ thị. – Ashesh

1

Hoặc sử dụng như trả lời bằng cách @Ashesh hoặc chỉ đơn giản là thêm phạm vi. Nếu bạn đặt phạm vi sai, bạn sẽ không có phạm vi bị cô lập và nhấp chuột sẽ hoạt động trên chỉ thị.

directives.directive('myTop',function($compile) { 
return { 
    restrict: 'EA', 
    scope: false, 
    templateUrl: 'views/header.html', 
    } 
}) 
Các vấn đề liên quan