2012-10-18 11 views
53

Tôi có một danh sách các outerItems. Bên trong mỗi outerItem, tôi có một danh sách các innerItems. Chúng được sắp xếp động.Làm cách nào để nhận phần tử dom phạm vi hiện tại trong bộ điều khiển AngularJS?

Khi con trỏ chuột trỏ vào một trong các mục bên trong, tôi phải hiển thị cửa sổ bật lên ngay phía trên phần tử innerItem đó.

div Popup là con của cơ thể, bởi vì tôi không muốn có một cửa sổ bật lên riêng biệt cho mỗi innerItems.

Cách tôi xem - trên ng-mouseover Tôi gọi chức năng đặt thuộc tính bên trái/trên cùng cho cửa sổ bật lên hoàn toàn có vị trí của tôi. Vì vậy, đối với mỗi innerItems tôi muốn gọi phương thức jQuery .offset() cung cấp cho tôi các giá trị trái/trên cùng từ góc trên cùng bên trái của trang.

Vậy làm thế nào tôi có thể lấy đối tượng jQuery của phần tử phạm vi hiện tại? Hoặc, nếu tôi đã chọn con đường sai

Trả lời

69

Trong điều khiển:

function innerItem($scope, $element){ 
    var jQueryInnerItem = $($element); 
} 
+44

bạn đã chọn sai đường. Dont EVER truy cập phần tử $ trong bộ điều khiển. Bạn cần phải bọc này như là một chỉ thị Popup và sau đó đặt trong cửa sổ bật lên trong HTML của bạn. – ganaraj

+1

Tại sao sai khi truy cập phần tử $ trong bộ điều khiển? –

+11

Nó đi ngược lại câu thần chú không-dom-manipulation-in-the-controller. Giữ mã được tách riêng, cho phép kiểm tra dễ dàng hơn và giữ tất cả các mã thao tác mã dom và trong các mẫu. Điều đó đang được nói, đôi khi bạn cần yếu tố. Ví dụ, trình duyệt tự động hoàn thành các trường, điền vào các đầu vào nhưng không kích hoạt cập nhật ng_model. Trong những trường hợp đó, bạn phải trả $ (el) .val() đầu vào. – hurshagrawal

8

Các giải pháp tốt hơn và đúng là phải có một chỉ thị. Phạm vi là như nhau, cho dù trong bộ điều khiển của chỉ thị hoặc bộ điều khiển chính. Sử dụng $element để thực hiện các hoạt động DOM. Phương pháp được xác định trong bộ điều khiển chỉ thị có thể truy cập được trong bộ điều khiển chính.

Ví dụ, việc tìm kiếm một phần tử con:

var app = angular.module('myapp', []); 
app.directive("testDir", function() { 
    function link(scope, element) { 

    } 
    return { 
     restrict: "AE", 
     link: link, 
     controller:function($scope,$element){ 
      $scope.name2 = 'this is second name'; 
      var barGridSection = $element.find('#barGridSection'); //helps to find the child element. 
    } 
    }; 
}) 

app.controller('mainController', function ($scope) { 
$scope.name='this is first name' 
}); 
+1

câu hỏi là làm thế nào để có được html trong dom. Vì vậy, làm thế nào để có được trong chuỗi điều khiển của html từ một số yếu tố dom của id? – fdrv

+0

Tôi đã bỏ phiếu cho câu trả lời này, vì đó không phải là câu trả lời cho câu hỏi được đăng. – drdrej