zoukankan      html  css  js  c++  java
  • [AngularJS] Angular 1.5 $transclude with named slot

    In Angular 1.5, there is no link and compile. So use if you transclude, you cannot access the fifth arguement in link function, which is transcludeFn.

    But in v1.5, you can access $transclude in controller. 

    And what you can do for that is check whether the transclude element is passed in or not. For that you also need to use named slot, not default transclude: true.

    See example:

    class ServiceListController {
        constructor($transclude) {
            this.$transclude = $transclude;
        }
    
        hasTransclude(){
            return this.$transclude.isSlotFilled('actions');
        }
    }
    
    const clmServiceListComponent = {
        bindings: {
           ...
        },
        transclude: {
            'actions': '?clmActions'
        },
        controller: ServiceListController,
        controllerAs: 'vm',
        template: require('./service-list.html')
    };
    
    export default (ngModule) => {
        ngModule.component('clmServiceList', clmServiceListComponent);
    }
        

    In the example, we has a directive call 'clmActions', and gave slot name as 'actions'.

    So you can use:

    this.$transclude.isSlotFilled('actions');

    to check whether the transclude element is defined or not.

    In HTML:

    <clm-service-list>
          <clm-actions>
               <clm-action ></clm-action>
           </clm-actions>
    </clm-service-list>

    If we gave the clm-actions tag, the hasTransclude() function in controller will return 'true', if you remove clm-actions tag, the function will return false.

  • 相关阅读:
    一个可以拖拽的div
    网页设计与制作常见问题
    如何写出兼容性很好的页面
    图片4像素底边
    响应式布局简明示例
    CSS 实现背景图尺寸不随浏览器缩放而变化
    bootstrap实现pc屏幕五等分
    css中的px、em、rem 详解
    HTML 5的革新——语义化标签(一)
    jQuery实现TAB选项卡切换特效简单演示
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5384874.html
Copyright © 2011-2022 走看看