2013-03-21 27 views

Trả lời

1

tôi đã đưa ra một giải pháp mà dường như làm việc:

.directive('tag', ['$compile', function($compile) { 
    return { 
    priority: 1000, 
    terminal: true, 
    compile: function(telement, attrs) { 
     attrs.$set('tag', null); 
     attrs.$set('ngMaxlength', '10'); 
     attrs.$set('ngPattern', '/[\\w\\d]+/'); 

     var link = $compile(telement); 

     return function($scope, $element) { 
     link($scope, function(clonedElement) { 
     $element.replaceWith(clonedElement); 
     }); 
     } 
    } 
    } 
}]); 

Điều quan trọng là đảm bảo rằng chỉ thị có mức độ ưu tiên cao hơn tất cả các chỉ thị khác trên phần tử và kết thúc, do đó các thư mục khác ectives arent được biên dịch và liên kết.

3

Tôi không nghĩ rằng $compile(), chức năng liên kết hoặc terminal là cần thiết. Góc sẽ tự động biên dịch telement cho chúng tôi.

.directive('tag', [function() { 
    return { 
    priority: 1000, 
    compile: function(telement, attrs) { 
     attrs.$set('tag', null); 
     attrs.$set('ngMaxlength', '10'); 
     attrs.$set('ngPattern', '/[\\w\\d]+/'); 
    } 
    }; 
}]); 

Thử nghiệm với HTML này:

<input ng-model="test" ng-init="test=2" tag> 
{{test}} 

Plunker.

+0

Cảm ơn bạn đã chỉ ra attrs. $ Đặt cho tôi! Tuy nhiên, nó không có vẻ là sử dụng điều này để thiết lập các công trình ng-model. Bất kỳ ý tưởng tại sao không? Một sửa đổi của plunker của bạn hiển thị này: http://plnkr.co/edit/ad2zIbNqW800KZi2Ulxn?p=preview – MrException

+0

@MrException, tôi không biết tại sao nó không hoạt động. Đây là một câu hỏi SO về vấn đề này rất nhiều: http://stackoverflow.com/questions/17405790/adding-ngmodel-to-input-with-a-directive –

+0

Super @Mark, tôi đã kéo tóc ra cố gắng 'attrs. $ set ('ng-pattern') 'và không hiểu tại sao nó trông giống hệt nhau trong html nhưng không có gì xảy ra. Tôi muốn lưu ý rằng - trong các bài kiểm tra nhanh của tôi với Firefox và Chrome hiện tại và Angular 1.0.7 ít nhất — mức ưu tiên: 1000' dường như không cần thiết cho việc xác thực mẫu để hoạt động. – Daryn

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