Tôi hiện đang phát triển một slide menu directive cho AngularJS. Javascript bao gồm ba loại chỉ thị: các chỉ thị cho từng loại menu trượt (vì lợi ích ngắn gọn của tôi chỉ bao gồm menu trượt bên trái), một trình bao bọc cho phần còn lại của màn hình, asmWrapper và một nút điều khiển chỉ thị, asmControl. Hiện tại, tất cả các chỉ thị này đang sử dụng dịch vụ, asmService để liên lạc.ng-class sẽ không kích hoạt trên chỉ thị tùy chỉnh
Khi người dùng nhấp vào asmControl, bộ điều khiển của chỉ thị đó gọi một phương thức trên asmService xác định trình đơn nào đã được kích hoạt và phát ra 'asmEvent' trên $ rootScope. Bộ điều khiển asmSlidingMenu sẽ bắt sự kiện đó và cập nhật biến hoạt động trong phạm vi của nó, nhưng lớp CSS của phần tử DOM vẫn không thay đổi.
Tôi giả định ng-class hiện không được đặt. Làm thế nào để sửa lỗi này?
Tôi đã bao gồm mã cho chỉ thị asmSlidingMenu bên dưới. Để xem ví dụ hoàn chỉnh hơn, hãy xem Plunker tôi đã tạo.
slideMenu.directive('asmSlideLeft', ['$rootScope', 'asmService',
function($rootScope, asmService) {
return {
restrict: 'AEC'
, scope: {}
, controller: function($scope) {
$rootScope.$on('asmEvent', function(event, prop) {
console.log('Intercepted: ' + asmService.asmStates.slideLeft.active);
$scope.active = asmService.asmStates.slideLeft.active;
});
}
, compile: function(element, attrs) {
attrs.$set('class', 'asm asm-horizontal asm-left');
attrs.$set('data-ng-class', '{"asm-left-open: active"}');
return {
pre: function preLink(scope, iElement, iAttrs) {}
, post: function postLink(scope, iElement, iAttrs) {}
}
}
}
}]);
Cảm ơn bạn rất nhiều! Điều đó làm việc hoàn hảo. – Elzair
Điều gì xảy ra nếu phần tử của bạn có phần tử ng tồn tại bên ngoài phần tử chỉ thị? Chắc chắn bạn có thể làm: angular.element (document.getElementById ('id')). AddClass ('someclass') nhưng toàn bộ ý tưởng là có hai cách liên kết dữ liệu với góc. Sẽ tốt hơn nếu có tên lớp trong chế độ xem - trên chính phần tử html. Dễ đọc hơn. – Skychan
@Skychan Quan điểm của bạn là gì? – zeroflagL