이 글은 Vue에서 DOM에 접근하기 위해 $refs를 사용하는 것에 대한 Vue 2.0 연구 노트를 주로 소개하고 있습니다.
Vue에 대한 이전 연구를 통해 이제 Vue 인스턴스의 몇 가지 특별한 속성과 메서드를 더 깊이 이해할 필요가 있습니다. 가장 먼저 이해해야 할 것은 $refs
속성입니다. 하지만 JavaScript 부분을 살펴보기 전에 템플릿을 살펴보겠습니다. $refs
属性。但是在深入到JavaScript部分之前,我们先看看模板。
<p id="app"> <h1 id="nbsp-message-nbsp">{{ message }}</h1> <button @click="clickedButton">点击偶</button> </p> let app = new Vue({ el: '#app', data () { return { message: 'Hi,大漠!' } }, methods: { clickedButton: function () { console.log('Hi,大漠!') } } })
在Vue的模板中,我们可以在模板中的任何元素中添加ref
属性,这样就可以在Vue实例中引用这些元素。更具体地说,可以访问DOM元素。在上面的示例中的<button></button>
中添加ref
属性试试。这个按钮上已有绑定了一个click
事件,这个事件让我们在浏览器的控制面板中打印出Hi, 大漠!
信息。
<button ref="myButton" @click="clickedButton">点击偶</button>
注意,ref
属性不是一个标准的HTML属性,只是Vue中的一个属性。实际上,它甚至不会是DOM的一部分,所以在浏览器中你查看渲染的HTML,你是看不到有关于ref
的任何东西。因为在它前面没有添加:
,而且它也不是一个指令。
在Vue实例上使用$refs
属性可以通过myButton
来引用这个按钮。来看看在浏览器的控制台中打印出来,它将是什么样子。
let app = new Vue({ el: '#app', data () { return { message: 'Hi!大漠' } }, methods: { clickedButton: function () { console.log(this.$refs); } } })
如果你打开浏览器的控制台,我们可以看到这个属性是一个JavaScript的对象,它包含了ref
属性的所有元素的引用。
注意,这个对象中的键名(key
)与我们在ref
属性中指定的名称(name
)相匹配,而其值(value
)是DOM元素。在这种情况下,我们可以看到键名是myButton
,而其值是button
元素。而且这也和Vue没有任何关系。
所以在Vue中,可以通过在$refs
对象上访问ref
的名称来访问DOM元素。来看下面这个示例。我们点击按钮后,这个按钮的文本将会更改message
数据中的值。
let app = new Vue({ el: '#app', data () { return { message: 'Hi!大漠' } }, methods: { clickedButton: function () { console.log(this.$refs) this.$refs.myButton.innerText = this.message } } })
点击按钮之后,按钮的文本将更改变“Hi,!大漠
”:
当然,我们也可以通过使用查询选择器来访问DOM元素来实现这样的效果,但是使用ref
属性更简洁,而且这也是Vue中的方法。它也将更安全,因为你不会依赖于class
和id
。因此,几乎不会因为更改了HTML的标签或者CSS样式受到影响。
像Vue这样的JavaScript框架的主要目的之一就是让开发人员不必去处理DOM。所以你应该避免去做这样的事情,除非你真的需要去做。还应该要注意一个潜在的问题。
首先来看一个简单的示例,给h1
元素添加一个ref
属性。
{{ message }}
<button ref="myButton" @click="clickedButton">点击偶</button>
当我们点击按钮之后,浏览器控制台输出的值将会得到改变:
由于我们把Vue的实例赋值值了变量app
,所以我们可以继续使用它。现在要做的是改变元素的文本。最初<h1></h1>
元素的内容是message
的值,在下面这个示例中,通过一个setTimeout
来看看元素<h1></h1>
发生的变化:
let app = new Vue({ el: '#app', data () { return { message: 'Hi!大漠' } }, methods: { clickedButton: function () { console.log(this.$refs); this.$refs.myButton.innerText = this.message } } }) setTimeout(function() { app.$refs.message.innerText = '延迟2000ms修改h1元素的文本'; }, 2000);
正如你所看到的,我们在更新数据属性时覆盖了我们对DOM所做的更改。这样做的原因是,当访问DOM元素并直接操作它们时,实际上跳过了前面文章中讨论到的虚拟DOM。因此,Vue仍然控制着h1
元素,甚至当Vue对数据中的做出更新时,它会更新虚拟DOM,然后更新DOM本身。因此,你应该小心使用对DOM的直接更改,就算是你不小心做了相应的修改,你所做的任何更改都将可能会被覆盖。虽然在使用refs
时应该小心更改DOM,但是做只读操作相对来说比较安全,比如从DOM中读取值。
另外来看看v-for
指令中使用refs
属性的效果。比如下面这个示例,给一个无序列表ul
,通过v-for
指令输出1
至10
的数字。
<ul> <li v-for="n in 10" ref="numbers">{{ n }}</li> </ul>
当你点击按钮时,$refs
<!-- HTML --> <p id="app"> <p class="actions"> <button @click="toggleModal('new-item')">添加列表</button> <button @click="toggleModal('confirm')">删除列表</button> </p> <modal ref="new-item"> <p>添加新的列表</p> <p slot="actions"> <button>保存</button> <button>取消</button> </p> </modal> <modal ref="confirm"> <p>删除列表?</p> <p slot="actions"> <button>删除</button> <button>取消</button> </p> </modal> <script type="x-template" id="modal-template"> <transition name="modal-toggle"> <p class="modal" v-show="toggle"> <button class="modal__close" @click="close">X</button> <p class="modal__body"> <h1 id="Modal">Modal</h1> <slot>这是一个Modal,是否需要添加新的内容?</slot> </p> <p class="modal__actions"> <slot name="actions"> <button @click="close">关闭</button> </slot> </p> </p> </transition> </script> </p> // JavaScript let Modal = Vue.component('modal', { template: "#modal-template", data () { return { toggle: false } }, methods: { close: function() { this.toggle = false; } } }); let app = new Vue({ el: "#app", methods: { toggleModal(modal) { this.$refs[modal].toggle = !this.$refs[modal].toggle; } } });Vue 템플릿에서는 템플릿의 모든 요소에
ref
속성을 추가하여 Vue 인스턴스에서 이러한 요소를 참조할 수 있습니다. 보다 구체적으로 말하면 DOM 요소에 액세스할 수 있습니다. 위 예에서 <button></button>
에 ref
속성을 추가해 보세요. 이 버튼은 click
이벤트에 바인딩되어 있습니다. 이 이벤트를 사용하면 Hi, Desert!
정보. 🎜rrreee🎜ref
속성은 표준 HTML 속성이 아니라 Vue의 속성입니다. 실제로 DOM의 일부도 아니므로 브라우저에서 렌더링된 HTML을 보면 ref
에 대한 내용이 전혀 표시되지 않습니다. 앞에 :
가 추가되지 않았고 지시문도 아니기 때문입니다. 🎜🎜Vue 인스턴스의 $refs
속성을 사용하여 myButton
을 통해 이 버튼을 참조하세요. 브라우저 콘솔에 인쇄되면 어떻게 보이는지 살펴보겠습니다. 🎜rrreee🎜브라우저 콘솔을 열면 이 속성이 ref
속성이 있는 모든 요소에 대한 참조를 포함하는 JavaScript 개체임을 알 수 있습니다. 🎜 🎜🎜이 개체의 키 이름(
key
)은 ref
속성에 지정한 이름(name
)과 일치하며 해당 값은 (값
)은 DOM 요소입니다. 이 경우 키는 myButton
이고 해당 값은 button
요소임을 알 수 있습니다. 그리고 이것은 Vue와는 아무런 관련이 없습니다. 🎜🎜그래서 Vue에서는 $refs
객체의 ref
이름에 액세스하여 DOM 요소에 액세스할 수 있습니다. 다음 예를 고려하십시오. 버튼을 클릭하면 버튼의 텍스트가 메시지
데이터의 값을 변경합니다. 🎜rrreee🎜버튼을 클릭하면 버튼 텍스트가 "Hi,! Desert
"로 변경됩니다. 🎜
🎜🎜물론 쿼리 선택기를 사용하여 DOM 요소에 액세스함으로써 이 효과를 얻을 수도 있습니다. 하지만
ref
속성을 사용하는 것이 더 간결하며 이는 Vue의 메서드이기도 합니다. 또한 class
및 id
에 의존하지 않으므로 더욱 안전합니다. 따라서 HTML 태그나 CSS 스타일을 변경해도 거의 영향이 없습니다. 🎜🎜Vue와 같은 JavaScript 프레임워크의 주요 목적 중 하나는 개발자가 DOM을 다루지 않아도 되도록 하는 것입니다. 따라서 꼭 필요한 경우가 아니면 이와 같은 작업을 피해야 합니다. 또한 주목해야 할 잠재적인 문제도 있습니다. 🎜🎜먼저 h1
요소에 ref
속성을 추가하는 간단한 예를 살펴보겠습니다. 🎜rrreee🎜버튼을 클릭하면 브라우저 콘솔의 출력 값이 다음과 같이 변경됩니다: 🎜
正如上图所看到的一样,把 上面通过简单的示例了解了Vue中的 在Web中Modal组件是经常可见的一个组件。来看看 效果如下: 上面是我整理给大家的,希望今后会对大家有帮助。 相关文章:🎜🎜Vue 인스턴스를
app
변수에 할당했으므로 계속 사용할 수 있습니다. 이제 우리가 해야 할 일은 요소의 텍스트를 변경하는 것입니다. 처음에는 <h1></h1>
요소의 내용이 message
의 값입니다. 다음 예에서 요소는
setTimeout <h1></h1>
변경 사항: 🎜rrreee🎜🎜보시다시피 데이터 속성을 업데이트할 때 DOM에 적용한 변경 사항을 덮어쓰고 있습니다. 그 이유는 DOM 요소에 액세스하고 이를 직접 조작할 때 실제로 이전 기사에서 설명한 가상 DOM을 건너뛰기 때문입니다. 따라서 Vue는 여전히
h1
요소를 제어하며 Vue가 데이터를 업데이트하더라도 가상 DOM을 업데이트한 다음 DOM 자체를 업데이트합니다. 따라서 실수로 변경한 경우에도 변경 사항을 덮어쓸 수 있으므로 DOM을 직접 변경할 때는 주의해야 합니다. refs
를 사용할 때 DOM을 변경할 때는 주의해야 하지만, DOM에서 값을 읽는 등의 읽기 전용 작업을 수행하는 것이 비교적 안전합니다. 🎜🎜또한, v-for
지시문에서 refs
속성을 사용하는 효과를 살펴보겠습니다. 예를 들어 다음 예에서는 순서가 지정되지 않은 목록 ul
이 있는 경우 v-for
명령을 사용하여 1
을 10 번호입니다. 🎜rrreee🎜버튼을 클릭하면 <code>$refs
속성이 브라우저 콘솔에 출력됩니다: 🎜numbers
属性添加到了对象中,但需要注意该值的类型。与之前看到的DOM元素不同,它实际上是一个数组,一个DOM元素的数组。当使用ref
属性和v-for
指令时,Vue会迭代所有DOM元素,并将它们放置在数组中。在这种情况下,这就输出了10
个li
的DOM元素的数组,因为我们迭代了10
次。每个元素都可以像我们之前看到的那样使用。$refs
在Vue中是怎么访问到DOM元素的。接下来看一个简单的示例。$refs
怎么来来控制Modal的打开和关闭。<!-- HTML -->
<p id="app">
<p class="actions">
<button @click="toggleModal('new-item')">添加列表</button>
<button @click="toggleModal('confirm')">删除列表</button>
</p>
<modal ref="new-item">
<p>添加新的列表</p>
<p slot="actions">
<button>保存</button>
<button>取消</button>
</p>
</modal>
<modal ref="confirm">
<p>删除列表?</p>
<p slot="actions">
<button>删除</button>
<button>取消</button>
</p>
</modal>
<script type="x-template" id="modal-template">
<transition name="modal-toggle">
<p class="modal" v-show="toggle">
<button class="modal__close" @click="close">X</button>
<p class="modal__body">
<h1 id="Modal">Modal</h1>
<slot>这是一个Modal,是否需要添加新的内容?</slot>
</p>
<p class="modal__actions">
<slot name="actions">
<button @click="close">关闭</button>
</slot>
</p>
</p>
</transition>
</script>
</p>
// JavaScript
let Modal = Vue.component('modal', {
template: "#modal-template",
data () {
return {
toggle: false
}
},
methods: {
close: function() {
this.toggle = false;
}
}
});
let app = new Vue({
el: "#app",
methods: {
toggleModal(modal) {
this.$refs[modal].toggle = !this.$refs[modal].toggle;
}
}
});
위 내용은 $refs는 Vue의 DOM에 액세스합니다(자세한 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
