2017-01-24 3 views
0

Я пытаюсь немного передать часть информации в один из моих компонентов.Несогласованность компонентов VueJS 2 при использовании выражений

Я пытаюсь перебрать список данных и передать в булевом наборе значение true для последнего элемента списка. Я сталкиваюсь с интересной несогласованностью, где, если я использую v-bind:isLast="index + 1 == tiers.length" в следующем коде, он вычисляет значение false, но если я делаю v-bind:test="{index: index, tiersLength: tiers.length, bool: index + 1 == tiers.length}" и использую объект для хранения этой информации, а не ожидая логического, ключ bool имеет значение true в объекте ,

Кто-нибудь знает, почему это так? А также, будет ли это лучше, чем вычисленное свойство? Я не хочу передавать больше информации из списка ярусов в компонент, поскольку мне кажется, что этот компонент вообще не должен забывать о списке уровней.

<section id="classification-metadata-editor"> 
    <metadata-button-row 
    v-for="(row,index) in tiers" 
    v-bind:row="row" 
    v-bind:index="index" 
    v-bind:isLast="index + 1 == tiers.length" 
    v-bind:test="{index: index, tiersLength: tiers.length, bool: index + 1 == tiers.length}"> 
    </metadata-button-row> 
</section> 

isLast: false 
test: {index: 0, tiersLength: 1, bool: true} 

Я не совсем уверен, если это предназначено, как я чувствую, что я делаю немного больше, чем то, что может предназначаться с установкой пропеллер, но я не совсем уверен, как еще это сделать. Я искал похожие вопросы, но не совсем уверен в правильной терминологии для поисков, поэтому приношу свои извинения, если это будет рассмотрено в другом месте.

Спасибо!

+0

Хорошо .. После многих часов забавного устранения неполадок это выглядит как вызов переменной isLast был включен союзник вопрос. Изменяя эту переменную для тестирования как в bind, так и в компоненте, логическое значение начинает оцениваться как истинное. Интересно. Кажется, что заглавные буквы отбрасывают мой код. Не знаю, почему. Тот же код, но заменяя имя переменной isLast, lastInArray, arrayLast все вернулись как false, но называя его тестирование, is_last, last_in_array, все оцениваются как true. –

ответ

0

Вы не можете назначить объект подпирать так:

v-bind:test="{index: index, tiersLength: tiers.length, bool: index + 1 == tiers.length}"> 

Вы должны создать вычисляемое свойство или метод, чтобы получить этот объект, как следующее:

methods: { 
    getObject (index) { 
    return {index: index, tiersLength: this.tiers.length, bool: index + 1 == this.tiers.length} 
    } 
} 

и использовать этот метод шаблон:

v-bind:test="getObject(index)" 
+0

Я обновил свой код, чтобы отразить предложение, но он все еще, кажется, возвращает false, где я ожидаю, что это правда. Вот обновления: 'v-связывания: isLast = "isLast (индекс)"' Добавлен к родителю: 'Методы: {isLast: функция (индекс) { возврата Логическое (индекс + 1 === this.tiers.length) } ' Я также пробовал это без булевых .. все еще ложных. Я также не совсем уверен, что вы имеете в виду, вы не можете связать такой объект. Я выполнил его с помощью вышеуказанного кода. Может быть, эта практика не рекомендуется? Или не реактивны, поэтому мы не используем его? Дальнейшее объяснение будет приветствоваться –

+0

Я понял, что происходит с моим кодом. Большое вам спасибо за помощь и предложение по организации моего кода лучше @Saurabh. Отметьте свой ответ как ответ на дополнительную информацию. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^