Vue.js Как вывести атрибут внутри тега html, когда имя атрибута включено в значение? - PullRequest
0 голосов
/ 16 сентября 2018

Если у меня есть структура данных, которая содержит атрибуты полей следующим образом, как я могу вывести значение dataAttributes внутри html?

var app3 = new Vue({
    el: '#app-3',
       data: {
         field: { 
                  type: 'text,
                  name: 'First Name', 
                  class: 'form-control js-user-lookup',
                  dataAttributes: 'data-autocomplete-url=api/users data-selected=123',
                }
       }
})

<input :type="field.type"
       :id="field.name"
       :name="field.name"
       :class="field.class"
       {{field.dataAttributes}} />

Вы не можете использовать синтаксис усов внутри тегов htmlи я не могу связать его с атрибутом data- *, поскольку атрибут является частью значения, например data-autocomplete-url и data-selected?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы можете сделать это проще, если у вас есть строка dataAttributes, переданная как объект javascript, и просто связать ее так, как это v-bind = "myobject".Если это невозможно, вы можете преобразовать его с помощью вычисляемого свойства. Проверьте ниже пример

<div id="app">
</div>



 var instance = new Vue({
  el:'#app',
  data:function(){
    return {
      inputType:'password',
      fieldAttributes:"data-autocomplete-url=api/users data-selected=123"
   };
 },
  computed:{
    getDataAttributes:function(){
     var attributes = this.fieldAttributes.split(' ');

    var attributesO = {};
    for(var a=0;a<attributes.length;a++){
      var attribute = attributes[a];
      var attribute_ar = attribute.split('=');
      attributesO[attribute_ar[0]] = attribute_ar[1];
    }

     return attributesO;
    }
 },
 methods:{
   getAttribute:function(){
     alert(this.$refs.myinput.dataset.selected)
   }
  },
   template:`<div>
    <input ref="myinput" v-on:click="getAttribute" :type="inputType"  v-bind="getDataAttributes" />
    </div>`
   });
0 голосов
/ 16 сентября 2018

Вы не можете сделать это с простым синтаксисом привязки данных.Вам нужно будет использовать кастом directive.Это будет выглядеть следующим образом.

<input :name="field.name" v-data-binder="field.dataAttributes" />

Ваше определение директивы будет выглядеть примерно так:

// Register a global custom directive called `v-focus`
Vue.directive('data-binder', {
    // When the bound element is inserted into the DOM...
    inserted: function (el, binding) {
        // Perform data attribute manipulations here.

        // 1. Parse the string into proper key-value object
        // binding.value

        // 2. Iterate over the keys of parsed object

        // 3. Use JavaScript *dataset* property to set values
    }
})

Вам также понадобится хук updated в определении директивы для удаления существующих data - * атрибуты всякий раз, когда значение, переданное директиве, изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...