首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ng-class不会触发自定义指令。

ng-class不会触发自定义指令。
EN

Stack Overflow用户
提问于 2014-04-25 23:26:40
回答 1查看 11.2K关注 0票数 10

我目前正在为幻灯片菜单指令开发一个AngularJS。javascript包含三种类型的指令:针对每种类型的滑动菜单的指令(为了简洁起见,我只包含左滑动菜单)、屏幕其余部分的包装指令asmWrapper和控制按钮指令asmControl。目前,所有这些指令都在使用服务asmService进行通信。

当用户单击asmControl时,该指令的控制器在asmService上调用一个方法,该方法确定哪个菜单已被触发,并在$rootScope上发出一个“asmEvent”。asmSlidingMenu's控制器将捕获该事件并更新其作用域中的活动变量,但DOM元素的CSS类保持不变。

我假设没有设置ng类。我该怎么解决这个问题?

我已经包含了下面asmSlidingMenu指令的代码。要查看更完整的示例,请查看我创建的柱塞

代码语言:javascript
复制
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) {}
        }
      }
  }
}]);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-26 07:12:35

首先,active位于隔离作用域中,因此ng-class无法访问它。

其次,更重要的是,ng-class是在之后添加的,元素的指令是通过角度收集的。太晚了。

如果您有自己的指令,就没有理由使用ng-class

代码语言:javascript
复制
slideMenu.directive('asmSlideLeft', ['$rootScope', 'asmService',
  function($rootScope, asmService) {
    return {
      restrict: 'AEC'
      ...
      link: function(scope, element) {
        element.addClass('asm asm-horizontal asm-left');
        $rootScope.$on('asmEvent', function() {
           if (asmService.asmStates.slideLeft.active) {
             element.addClass('asm-left-open');
           }
           else {
            element.removeClass('asm-left-open');
           }
          ...
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23304673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档