关于Iview select 开启多选时,@on-change 方法自动触发

上关键代码

<i-select v-else v-model="row.permission" multiple @on-change="updatePermission(row.openID,$event)">
     <i-option v-for="(permission,index) in dictionary_permission" :value="permission" :label="permission" :key="index"></i-option> :label="permission" :key="index" ></i-option>
</i-select>

不知道为什,每次刷新页面时,on-change 方法就会自动触发

其中row.permission 是json格式的数组,如 ["增加","删除","修改"]

因为iview 说 select 开启多选时,接受数组类型数据,同时也返回数组类型数据,所以我获取到数据的时候,转换成了数组,所以row.permission是数组没问题,代码如下

for (let userPart of temp) {
    userPart.permission = JSON.parse(userPart.permission);
}

问题就不知道出在哪里。。。。。。有老哥知道这个是怎么回事吗?需要其他代码的话,麻烦提一下,谢谢

阅读 9.3k
2 个回答

iviewSelectv-model的默认值非空数组确实会在初始化时触发一次on-change,但不知是有意为之还是bug

我自己回答一下,根据asseek老哥提供的思路,最后决定加一个@on-open-change的方法来判断是否允许执行on-change中的方法

修改后的select代码如下

             <i-select v-else v-model="row.permission" @on-open-change="allowedChange" @on-change="updatePermission(row.openID,$event)" multiple>
                <i-option v-for="permission in dictionary_permission" :value="permission" :label="permission" :key="permission" ></i-option>
              </i-select>
        allowedChange(value){
          console.log("是否允许修改 : ",value);
          this.could_update = value;
        },
        async updatePermission(aim_openID,new_permission) {
          if (this.could_update){
            console.log("正在修改");
            await this.$apis.AdminApi.updateRoleOrPermission(aim_openID,JSON.stringify(new_permission),"permission");
          }
        },
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题