VueJS는 조건부로 요소에 대한 속성을 추가합니다.


119

VueJS에서는 v-if를 사용하여 DOM 요소를 추가하거나 제거 할 수 있습니다.

<button v-if="isRequired">Important Button</button>

그러나 dom 요소의 속성을 추가 / 제거하는 방법이 있습니다. 예를 들어 다음의 경우 필수 속성을 조건부로 설정합니다.

Username: <input type="text" name="username" required>

비슷한 방법으로 :

Username: <input type="text" name="username" v-if="name.required" required>

어떤 아이디어?


4
너무 명확하지는 않지만 (따라서 혼란) 문서는 실제로 속성 값이 false로 평가되면 속성이 생략 된다고 말합니다 ( vuejs.org/v2/guide/syntax.html#Attributes )
AlexanderB

사실, 문서는 경우 속성이 추가되지 않습니다 말한다 "...의 값이 null, undefined또는 false" false로 평가 JS 스크립트 다르다. 즉, 빈 문자열은 JavaScript에서 거짓이지만 여전히 DOM에 속성을 추가합니다. 당신이 시도 할 수 있음을 방지하기 위해v-bind:name="name || false"
데닐손 Sá 마이 아에게

@AlexanderB 그것이 사실이라면 어떻게 falseprop을 통해 자식 컴포넌트에 명시 적 으로 전달할 수 있습니까?
Bruce Sun

@BruceSun, 만약 당신이 거짓 값을 주었을 때 "의도하지 않게"컨텍스트의 속성이 사라지면-문자열로 전달해보십시오 'false'. 다른 경우에 요소에서 부울이 아닌 html 속성의 존재를 제어해야하는 경우 v-if여기에 제안 된대로 조건부 렌더링을 사용할 수 있습니다 . github.com/vuejs/vue/issues/7552#issuecomment-361395234
AlexanderB

내가 생각 @AlexanderB 나 자신을 해결하는 데 - 내가 말을해야 attribute하지만 prop. false컴포넌트 속성을 통해 명시 적으로 안전하게 전달할 수 있지만 속성 (속성으로 인식되지 않음)이 아닙니다. 나 맞아?
Bruce Sun

답변:


127

시험:

<input :required="test ? true : false">

9
긴 형식은<input v-bind:required="test ? true : false">
nathanielobrown

8
anythingAtAll : ? true : false(나 if (condition) { return true; } else { return false; }) 모든 언어입니다 ... 보기 흉한 . 그냥 사용 return (condition)하거나,이 경우에는<input :required="test">
Stephen P

5
확실 변수가있는 경우 test입니다 boolean, 당신은 사용할 수 있습니다:required="test"
strz

2
이것은 구성 요소에 따라 다릅니다! 속성이 String값을 수락하면 값을 설정 false하면 type check오류가 발생할 수 있습니다. 따라서 undefinedfalse 대신에 설정하십시오 . docs
Traxo jul.

사용하는 :required="required"경우 required나를 위해에서 부울 구성 요소 속성 결과 <엘 필요가 = "필요한">입니다
앤드류 카스텔라

65

가장 간단한 형태 :

<input :required="test">   // if true
<input :required="!test">  // if false
<input :required="!!test"> // test ? true : false

1
이것은 구성 요소에 따라 다릅니다! 속성이 String값을 수락하면 값을 설정 false하면 type check오류가 발생할 수 있습니다. 따라서 undefinedfalse 대신에 설정하십시오 . docs
Traxo

@ 이중 느낌표를 사용하여 답변을 !! 확인했습니다. 어제 전에 해당 구문을 본 적이 없으며 코드 검토 중에 다음을 발견했습니다.- 값에 <input :required="!!!recipe.checked" v-model="recipe.pieType"><select :required="!!!recipe.checked" v-model="recipe.ingredients" :options="ingredients"></select> 대해 !!!(3) 이 무엇을 의미 하는지 알고 :required있습니까? 감사.
Chris22

2
@ Chris22! test와 !!! test 사이에는 차이가 없습니다. !!! test는 단지 !! (! test)이고! test는 부울이기 때문에 !! (! test)는 그저 이중 부정이므로 같은. 이것을 확인하십시오 : stackoverflow.com/a/25318045/1292050
Syed

@Syed 감사합니다. 귀하의 링크를 따라이 항목도 찾았으며 동의합니다 . : ^)
Chris22

무엇 @Syed 말한 것은 사실이 아니다
구드 슨

16

<input :required="condition">

테스트진실<input :required="test ? true : false"> 이면 이미 속성을 얻고 테스트거짓 이면 속성을 얻지 못 하기 때문에 필요하지 않습니다 . 부분은 많은 같이, 중복 ...requiredtrue : false

if (condition) {
    return true;
} else {
    return false;
}
// or this...
return condition ? true : false;
// can *always* be replaced by...
return (condition); // parentheses generally not needed

이 바인딩을 수행하는 가장 간단한 방법은 <input :required="condition">

테스트 (또는 조건 )가 잘못 해석 될 수있는 경우에만 다른 작업을 수행해야합니다. 이 경우 Syed의 사용이 !!트릭 을 수행합니다.
  <input :required="!!condition">


11

boolean강제로 전달할 수 있으며 !!변수 앞에 놓을 수 있습니다 .

let isRequired = '' || null || undefined
<input :required="!!isRequired"> // it will coerce value to respective boolean 

하지만 수신 컴포넌트가 type소품에 대해 정의한 다음 경우에 대해주의를 기울이고 싶습니다 . 이 경우 isRequired유형을 정의한 경우 string전달 boolean하면 유형 검사가 실패하고 Vue 경고가 표시됩니다. 해당 소품을 전달하지 않으려는 문제를 해결하려면 undefinedfallback을 넣으면 소품이component

let isValue = false
<any-component
  :my-prop="isValue ? 'Hey I am when the value exist' : undefined"
/>

설명

나는 같은 문제를 겪었고 위의 해결책을 시도했습니다 !! 예, 나는 보이지 prop않지만 실제로 여기에서 필요한 것을 충족하지 못합니다.

내 문제 -

let isValid = false
<any-component
  :my-prop="isValue ? 'Hey I am when the value exist': false"
/>

위의 경우, 내가 한되지 기대했던 my-prop아이 컴퍼넌트에 전달받을 - <any-conponent/>I가 표시되지 않습니다 propDOM있지만 내에서 <any-component/>구성 요소 오류가 소품 유형 검사 실패의 튀어 나옵니다. 하위 구성 요소로서, 나는 기대하고 my-prop을 수 String있지만입니다 boolean.

myProp : {
 type: String,
 required: false,
 default: ''
}

즉, 자식 구성 요소가 false. 여기서 조정은 자식 구성 요소가 default-value검사를 건너 뛰도록하는 것입니다. undefined그래도 합격 !

<any-component
  :my-prop="isValue ? 'Hey I am when the value exist' : undefined"
/>
 

이것은 작동하고 내 자식 소품에는 기본값이 있습니다.


2

HTML 사용

<input :required="condition" />

그리고 같은 데이터 속성에서 정의

data () {
   return {
      condition: false
   }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.