2015-07-14 23 views
5

Đây là đoạn mã tái tạo vấn đề của tôi:thứ 3 chỉ thị bên trong chỉ thị khác trong khi sử dụng "điều khiển như ..." cú pháp

html:

... 
<div ng-controller="worker as workerCtrl"> 
    <my-directive label="label" controllerAs="workerCtrl" function="fileUpload(e, this.options)"></my-directive> 
</div> 

điều khiển:

... 
function fileUpload(file, options){...} 
... 

chỉ thị:

function myDirective($compile) { 

    var directive = { 
     restrict: 'E', 
     link: link 
    }; 
    return directive; 

    function link(scope, element, attrs) { 
     var htmlText = '<lx-file-input ' + 
      'change="'+attrs.controllerAs+'.'+attrs.uploadFunction+'" ' + 
      'label="'+attrs.label+'"></lx-file-input>'; 
     element.replaceWith($compile(htmlText)(scope)); 
    } 
} 

nên là: ('lx-file-input' là một chỉ thị bên thứ 3 ...)

<lx-file-input change="workerCtrl.fileUpload(e, this.options)" label="someLabel"</lx-file-input> 

Vấn đề là thời gian của biên dịch kiễu góc và liên kết tắt, và các mẫu còn lại với HTML chuỗi thay vì hàm được biên dịch. Tôi biết nó sẽ hoạt động nếu tôi sẽ đặt bộ điều khiển bên trong chỉ thị nhưng tôi muốn nó sử dụng cùng một chức năng trong cùng phạm vi 'workerCtrl' từ HTML.

Trả lời

1

Trước tiên, bạn có thể thử truyền chức năng từ bên ngoài như on-close vào chính thức Angular guide.

<div ng-controller="Controller"> 
    {{message}} 
    <my-dialog ng-hide="dialogIsHidden" on-close="hideDialog(message)"> 
    Check out the contents, {{name}}! 
    </my-dialog> 
</div> 

Nhưng tôi không hiểu tại sao bạn không nên tạo chức năng cầu trong phạm vi chỉ thị của bạn gọi đến chức năng mong muốn. Tôi thích cách này.

Gần đây tôi đã có gần như giống nhau answer như bạn vừa mới đăng. Bạn cũng có thể tìm thấy các bài đăng hữu ích khác ở đó.

+0

// HackMagicDragonsBeHere gì về một khủng khiếp 2 bước instantiation? Tạo một chỉ thị tạm thời phân tích cú pháp hàm điều khiển và thay thế chính nó bằng một chỉ thị thực sự mang lại chỉ thị của bên thứ ba. : D Chỉ cần tự hỏi liệu nó có hiệu quả không ... –

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