自定义指令的参数

指令无外乎增强了 HTML,提供额外的功能 
以上的指令基本上已经可以满足我们的绝大多数需要了 
少数情况下我们有一些特殊的需要,可以通过自定义指令的方式实现。

从更高的层次上说,指令是DOM元素上的一些标记(例如: 属性,元素名称,注释和一些CSS的类)用于转换DOM元素的内部或者对DOM元素进行一些行为上的绑定。

    • 注意事项

      • 自定义指令和自定义控制器都必须要挂载在模块之下。因为自定义指令的directive是angular.module下的一个方法,点击这里查看
      • 具体用法为 angular.module('moduleName',[]).directive(name, directiveFactory);
      • angular.module 可以使用链式编程的形式,返回模块本身,可定义多个指令。
      • 定义指令的时候用驼峰命名法如:myDirective , 使用的时候用匈牙利命名法:my-directive
      • 自定义指令可以把一段重复使用的方法封装起来,类似封装一些组件来使用。
    • 对return中的一些常用选项的说明 ,官方文档的说明(访问不了,可能是因为文档上的路由设置,需要一层层的点进去查看),就不再举例了。

      • template : 用于将一段自定义的代码绑定到含有对应指令的html中。
      • templateUrl : 用于将’其他html’文件渲染进入含有对应指令的html中。当然这里的’其他html’里面可以有我们的指令或者表达式,其实就是代码段,和在当前页面一样使用,只是抽离出去了,方便管理。这里会用异步请求的方式来得到这个文件。注意:此处会发送一个xhr请求。
      • transclude : 值为布尔型,需要在template中添加一个内置指令ng-transclude,将含有这个自定义指令中的内容,放入到template中去渲染,然后放到含有自定义指令的DOM元素内。
      • replace : 值为布尔型, 开启后就会把含有自定义指令的DOM元素,替换成template中的内容。
      • scope : 规范指令的作用域的问题,如果没写,ng中默认的是放在根作用域中的,一般每个控制器就会有一个作用域,每个指令也会存在一个作用域,并且作用域存在继承关系,我们为了规范作用域,可以在自定义指令中有一个scope选项,在scope内部定义一些属性。下面是示例代码。 
        html结构:

        <div ng-app='myApp'><haha title='hello' data='world'></haha></div>

        javascript结构:

        angular.module('myApp',[])
          .directive('haha',[function(){return { scope:{ title:'@', data:'@' }, template:'{{title}} {{data}}' } }])

        代码输出 hello world 其中 @ 表示 scope中的属性值,引用了使用自定义指令的DOM元素的属性值。

      • restrict : 用于指定自定义指令的类型。 A,表示只匹配属性。E,表示只匹配元素。C,表示只匹配类名。AEC,表示三种都可以作为匹配项。而M,匹配注释指令,已经被高版本抛弃使用了,我们推荐使用A和E。

      • link函数 : angular 中允许在这个内部进行一些dom操作,格式是这样的: link:function(scope, element, attrs){} scope代表的是当前指令的作用域,element代表当前元素,attrs代表元素的属性,在里面用的是jqlite里面的api。备注,如果只去操作dom,那么我们只需要return一个函数就行了,不用 link选项了。

转载于:https://www.cnblogs.com/yu-709213564/p/6156106.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue3中,自定义指令可以参数。首先,在全局中使用`Vue.directive`方法来定义指令,该方法的第一个参数是指令的名字,第二个参数是一个对象,包含了指令的各种属性和方法。其中,属性中的`bind`函数可以接收一个`binding`参数,它包含了一些信息,其中的`value`属性就是入的参数值。比如,我们可以定义一个名为`myDirective`的指令,然后在组件中使用该指令,并参数`loading`,如下所示: ```javascript Vue.directive('myDirective', { bind(el, binding) { // binding.value就是入的参数值 console.log(binding.value); // 输出:loading } }) // 在组件中使用指令 <template> <div v-myDirective="loading"></div> </template> export default { data() { return { loading: 'loading' } } } ``` 在上述代码中,`myDirective`指令绑定到`<div>`元素上,通过`v-myDirective`来使用,并将参数`loading`入。在指令的`bind`函数中,我们可以通过`binding.value`来获取到入的参数值。 这样,我们就可以在Vue3中使用自定义指令参数了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue自定义指令实现方法详解](https://download.csdn.net/download/weixin_38592502/14902824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue3 自定义指令详解](https://blog.csdn.net/weixin_46831501/article/details/124167378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值