2013-04-05 27 views
8

Tôi hiện đang sử dụng directiveElement.data("$ngModelController") để truy cập vào phần tử $ngModelController của phần tử, như trong ví dụ sau.

describe("directiveElement", function() { 
    it("should do something with ngModelController", inject(function($compile, $rootScope) { 
    var directiveElement = $compile("<input ng-model="myNgModel" customDirective type="text"></input>")($rootScope); 
    $rootScope.$digest(); 
    var ngModelCtrl = directiveElement.data("$ngModelController"); 
    ngModelCtrl.$modelValue = "12345"; 
    // do rest of test 
    })); 
}); 

Tuy nhiên, tôi muốn biết nếu có một tốt hơn để truy cập $ngModelController, hoặc nếu truy cập vào $ngModelController là một ý tưởng tồi?

+1

Bạn cũng có thể làm 'directiveElement .controller ('ngModel') '. Tôi cũng chắc chắn nghĩ rằng có những lý do thử nghiệm hợp pháp tại sao bạn sẽ muốn có một xử lý về điều này, mặc dù cách phổ biến hơn là để có được một xử lý trên nó thông qua 'form' (ví dụ: https://github.com/angular/angular. js/blob/master/test/ng/chỉ thị/formSpec.js). Bạn không chắc chắn lý do tại sao bạn thiết lập $ modelValue theo cách này. Bạn có lẽ chỉ muốn đặt 'myNgModel'? – jonc

+0

@jonc Nhận xét của bạn là câu trả lời tôi đang tìm kiếm, bạn có thể vui lòng đăng câu trả lời đó và tôi sẽ đánh dấu câu trả lời đó là câu trả lời. – JJohnston

+0

bạn có thể giả lập ngModelCtrl. $ ModelValue? – Winnemucca

Trả lời

15

Bạn cũng có thể làm directiveElement.controller('ngModel').

Tôi chắc chắn nghĩ rằng có chính đáng lý do kiểm tra lý do tại sao bạn sẽ muốn có một xử lý về vấn đề này, mặc dù cách phổ biến hơn là để có được một tay cầm vào nó thông qua hình thức (ví dụ. https://github.com/angular/angular.js/blob/master/test/ng/directive/formSpec.js)

+0

có 'ngModelController' trong một giờ và không thể tìm ra điều này. Cảm ơn! – Winnemucca

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