14

Tôi đang cố gắng thu hút chỉ thị của mình, tôi có thể dễ dàng sử dụng chức năng mẫu để loại bỏ HTML của mình, tuy nhiên, nếu tôi có một cú nhấp chuột trong mẫu của tôi, cách tôi có thể truy cập nó trong chức năng liên kết không?AngularJS - truy cập ng-click trong chỉ thị tùy chỉnh

chỉ thị của tôi:

app.directive('directiveScroll', function() { 
return { 
     restrict: 'AE', 
     replace: 'true', 
     template: '<div class="scroll-btns">' + 
      '<div class="arrow-left" ng-click="scrollLeft(sectionID)"></div>' + 
      '<div class="arrow-right" ng-click="scrollRight(sectionID)"></div>' + 
     '</div>', 
     link: function(scope, elem, attrs) { 
     $scope.scrollRight = function() { 
      console.log("scrollRight clicked"); 
     }; 
     $scope.scrollLeft = function() { 
      console.log("scrollLeft clicked"); 
     }; 
     } 
    }; 
}); 

Như bạn thấy, tôi đã thêm $scope.scrollRight chức năng link của tôi, tuy nhiên trên nhấp chuột, không có gì xuất hiện trong giao diện điều khiển.

Nếu tôi đặt:

$scope.scrollRight = function() { 
    console.log("scrollRight clicked"); 
}; 

$scope.scrollLeft = function() { 
    console.log("scrollLeft clicked"); 
}; 

Trong điều khiển của tôi (và ra khỏi thị của tôi), nó hoạt động như mong đợi.

Bất kỳ trợ giúp nào được đánh giá cao.

+2

'$ scope'! =' Scope'. –

+0

@DavinTryon - Cảm ơn bạn đã chỉ ra rằng –

+0

@proxygear: Nó không phải là lỗi đánh máy. Đó là một sự thiếu hiểu biết về phần người dùng vào thời điểm đó. – Animesh

Trả lời

17

chức năng liên kết của bạn được định nghĩa như thế này:

link: function(scope, elem, attrs) {..} 

tuy nhiên bạn đang viết các chức năng trên $scope biến:

$scope.scrollRight = function() { 
     console.log("scrollRight clicked"); 
    }; 
    $scope.scrollLeft = function() { 
     console.log("scrollLeft clicked"); 
    }; 

Trong trường hợp $ phạm vi không thực sự tiêm vào chức năng liên kết (và có thể không được tiêm), do đó, liên kết chỉ là chức năng đơn giản với các tham số. Bạn nên thay đổi $scope thành scope và nó sẽ hoạt động:

scope.scrollRight = function() { 
     console.log("scrollRight clicked"); 
    }; 
    scope.scrollLeft = function() { 
     console.log("scrollLeft clicked"); 
    }; 
+0

thats dường như đã làm việc, và làm thế nào để tôi truy cập vào sectionID tôi đang đi trên ngClick trong chức năng scrollRight/Left của tôi? –

+0

'scope.scrollLeft = function (param) {console.log (param); }; 'điều này hoạt động giống như JS đơn giản - truyền tham số cho các hàm tương ứng với các tham số trong khai báo hàm – domakas

+0

ah tôi thấy, nhờ làm rõ và giải pháp. –

0

Bạn có chắc là tham số hàm liên kết có tên là scope, không phải $scope không?

+0

@thôi tôi biết ... Thực ra tôi có nghĩa là tên thông số khác với những gì được sử dụng bên dưới trong mã, nếu bạn nhìn kỹ hơn ... Và tôi tin rằng đó là nguyên nhân gốc rễ. – Gildor

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