2014-06-10 19 views
19

Tôi đang cố gắng triển khai chỉ thị d3 trong Angular và rất khó bởi vì không có gì xảy ra trực quan và không có lỗi nào bị ném trên bảng điều khiển.Chỉ thị AngularJS không được gọi là

Dưới đây là chỉ thị d3 của tôi:

myApp.directive('d3-bars', ['d3Service', function($window, d3Service) { 
    return { 
    restrict: 'EA', 
    scope: {}, 
    link: function(scope, element, attrs) { 

// More code below .... 

Đây là HTML của tôi:

<d3-bars bar-height="20" bar-padding="5"></d3-bars> 

Lúc đầu, tôi nghĩ rằng nó đã không phụ thêm một svg, bởi vì kiểm tra các yếu tố đó là những gì nó trông giống như, nhưng bây giờ tôi không nghĩ rằng chỉ thị này thậm chí còn chạy cả. Tôi bị kẹt bên trong nó ngay từ đầu và nó cũng không xuất hiện. Tôi thiếu một cái gì đó đơn giản?

EDIT:

tôi đã cố gắng thay đổi dòng trên xuống

angular.module('myApp.directives', ['d3']) 
.directive('d3-bars', ['d3Service', function($window, d3Service) { 

Nhưng điều đó không làm việc, hoặc. Tôi thậm chí không biết sự khác biệt giữa hai tiêu đề là gì ...

+1

Điều này có cho bạn một lỗi không, bởi vì tôi sẽ gặp lỗi nếu bạn chỉ tiêm 'd3Service' trong mảng chèn phụ thuộc thay vì tiêm cả '' $ window ',' d3Service ', hàm ($ window , d3Service) {// code etc}] – JoshSGman

+0

^^ Tuyệt vời. Câu trả lời của bạn cộng với Engima đã làm việc rất tốt. –

Trả lời

49

Tên chỉ thị của bạn có thể sai. Các chỉ thị góc thường được gắn camel. Và khi trong HTML chúng bị thôi miên. để ngClass chuyển thành ng-class trong HTML.

Ít nhất khi tôi đã cố gắng sử dụng - hoặc các ký tự khác trong chỉ thị của tôi, nó không hoạt động.

Kiểm tra thuộc Tập đoàn Google sau này đối với một số giá trị: using dash in directive

Ngoài ra đây là những tài liệu: Directives - matching directives

Bạn cũng sẽ muốn làm cho sự thay đổi đó đã được đề xuất trong các ý kiến ​​của JoshSGman:

.directive('d3Bars',['$window', 'd3Service', function($window, d3Service) { 
+2

Ohh ... bây giờ tôi nhận được "Không thể đọc thuộc tính 'd3' không xác định tại liên kết". Một lỗi ... woo hoo! –

+0

Có thể bạn cũng cần thực hiện thay đổi mà @JoshSGman đề xuất. – EnigmaRM

+1

Nếu bạn chỉnh sửa câu trả lời của bạn thành nhận xét của thuộc tính @ JoshSGman, tôi sẽ chọn câu trả lời này là câu trả lời đúng. –

10

việc đặt tên chỉ thị của bạn là vấn đề. Angular bình thường hóa tên của các chỉ thị trong html trước khi nó khớp với các tên trong JavaScript. Quá trình chuẩn hóa hoạt động theo hai bước:

  1. Dải x và dữ liệu - từ mặt trước của phần tử/thuộc tính.
  2. Chuyển đổi tên dấu hai chấm, dấu gạch nối, hoặc gạch dưới dấu gạch chân thành camelCase.

Vì vậy, tên chính xác cho chỉ thị của bạn trong JavaScript sẽ là d3Bars. Thay đổi nó thành cái đó và nó sẽ hoạt động.

Xem https://docs.angularjs.org/guide/directive#matching-directives để biết thêm thông tin.

0

Tôi đã có hành vi tương tự khi tôi quên xác định thuộc tính link.

Không có lỗi trong bảng điều khiển, nothin.

Các vấn đề liên quan