2015-02-22 18 views
6

Được rồi, vì vậy tôi đã tạo ra một thị giảLàm thế nào để biên dịch lại một chỉ thị khi chèn vào DOM (angularjs)

<calendar></calendar> 

Nó được kết xuất như tôi mong đợi để mọi thứ hoạt động tốt. Bây giờ, câu hỏi của tôi là làm thế nào để (lại) render nó khi được chèn vào DOM? Tôi không muốn sử dụng nó trên trang của tôi tất cả các thời gian, tôi chỉ muốn tự động thêm nó và render chỉ khi tôi cần nó (nó là một phần của một mô-đun), giả sử, lý tưởng tôi muốn nó xuất hiện như

$("body").append("<calendar></calendar>") 

Làm cách nào để đạt được điều này với angularj?

Trả lời

3

Bạn cần phải viết dưới hai dòng bất cứ nơi nào bạn muốn tiêm yếu tố chỉ thị của bạn để DOM, đừng quên để thêm $document & $compile phụ thuộc vào bất cứ nơi nào bạn sử dụng.

var template = '<calender></calender>', 
    body = $document.find('body'); 
body.append($compile(template)(scope)); 
+0

Không, tôi muốn tìm một giải pháp một dòng –

+0

@ CarterăVeaceslav mã này nói rằng, bạn có thể tiêm chỉ thị 'calender' của bạn bằng cách sử dụng các dòng bên trong fucntion liên kết chỉ thị .. –

+0

Với jQuery đơn giản, tôi viết $ ("# mySelector"). MyModuleName ({... my parameters}) và tôi có thể dễ dàng hiển thị các mô-đun tùy chỉnh của mình ở nơi tôi muốn chúng và KHI tôi muốn chúng ... –

1

Các chuỗi các hành động là thế này:

  1. Tạo DOM yếu tố hoặc angular.element đối tượng:

    var calendar = angular.element('<calendar></calendar>'), 
    
  2. Vượt qua nó để $compile dịch vụ. Ở giai đoạn này, bạn cần phải cung cấp cho đối tượng phạm vi cần thiết:

    $compile(calendar)(scope); 
    
  3. Nối calendar yếu tố để tài liệu:

    angular.element('body').append(calendar); 
    

Vì vậy, tất cả cùng nhau có vẻ như:

var calendar = angular.element('<calendar></calendar>'); 
$compile(calendar)(scope); 
angular.element('body').append(calendar); 
+0

(2) $ compile is undefined –

+0

Bạn cần phải tiêm nó vào dịch vụ/bộ điều khiển của bạn. – dfsq

+0

Xem bản trình diễn này: http://plnkr.co/edit/ZNLwZAjtDtxLs1S9BVyf?p=preview – dfsq

0

Bạn có thể sử dụng dịch vụ biên dịch $ để biên dịch lại nó và sử dụng angular.element ('body'). chắp thêm để thêm nó vào pa ge một lần nữa. Ví dụ:

var el = $compile("<calendar></calendar>")($scope); 
    angular.element('body').append(el); 
2

Nó có thể đạt được với yếu tố góc:

angular.element('body').append($compile("<calendar></calendar>")($scope)); 
+0

Tôi đã thử trực tiếp từ bảng điều khiển chrome, nó nói "$ compile is not defined". Những gì tôi đang thiếu? –

+0

@ CarterăVeaceslav bao gồm các phụ thuộc '$ compile' về chức năng chỉ thị của bạn –

+0

không thể làm cho nó hoạt động, chỉ thị của tôi là w_calendar.directive ("wcalendar", function ($ biên dịch) { trở lại { hạn chế: "AE", templateUrl: "mẫu/w_calendar.html ", thay thế: true }; }); –

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