• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Vue 게시판 슨상님 필터 적용 질문 드립니다~

슨상님 필터 적용 질문 드립니다~

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #29319

    민재현
    참가자

    기존 post 에  제가 올린 필터로 덮어 씌우는 듯한데 으찌해야 할까요? 🙂

     

    <hr />

    App.vue

    <template>
      <div>
        <div v-if="step == 0">
          <button @click="more">
            <!-- <button @click="$store.dispatch('getData')">   -->
            게시글 더 보기
          </button>
        </div>

        <!-- footer -->
        <div v-if="step == 0">
          <div class="footer">
            <ul class="footer-button-plus">
              <input @change="upload" type="file" id="file" class="inputfile" />
              <label for="file" class="input-plus">+</label>
            </ul>
          </div>
        </div>

        <!-- header -->
        <div class="header">
          <!-- step == 1 -->
          <div v-if="step == 1">
            <ul class="header-button-left">
              <li style="color: black">Cancel</li>
            </ul>

            <ul class="header-button-right" @click="step++">
              <li style="color: black">Next</li>
            </ul>

            <div style="font-size: 40px; text-align:center;">🖌</div>
          </div>

          <!-- step == 2 -->
          <div v-if="step == 2">
            <ul class="header-button-right">
              <li @click="publish" style="color: black">발행</li>
            </ul>
          </div>
        </div>

        <!-- component -->
        <Container
          :selectFilter="selectFilter"
          :post="post"
          :step="step"
          :url="url"
          @uploadText="content = $event"
        />
      </div>
    </template>

    <script>
    import Container from "./components/Container.vue";
    import post from "./assets/data/post";
    import axios from "axios";

    export default {
      name: "App",
      data() {
        return {
          content: "",
          url: "",
          step: 0,
          post: post,
          count: 0,
          selectFilter: "",
        };
      },
      components: { Container },
      mounted() {
        this.emitter.on("clickBox", (a) => {
          // console.log(a); // 수신 1개 확인함!
          this.selectFilter = a; // selectFilter 에는 _1977 들어있는 상태
        });
      },
      methods: {
        more() {
          axios
            .get(https://minjaehyun.github.io/vue/more${this.count++}.json)
            .then((result) => {
              this.post.push(result.data);
            })
            .catch();
        },
        upload(e) {
          let files = e.target.files;
          let file = files[0];
          let url = URL.createObjectURL(file);
          this.url = url;
          this.step = 1;
        },
        publish() {
          var uploadPost = {
            name: "tester",
            userImage: "https://placeimg.com/100/100/arch",
            postImage: this.url,
            likes: 41,
            date: "May 15",
            liked: false,
            content: this.content,
            filter: this.selectFilter,
          };
          this.post.unshift(uploadPost);
          this.step = 0;
        },
      },
    };
    </script>

    <style>
    @import "assets/css/app.css";
    </style>

     

    Container.vue

    <template>
      <div>
        <!-- post page -->
        <div v-if="step == 0">
          <Post
            :selectFilter="selectFilter"
            :post="item"
            v-for="item in post"
            :key="item.id"
          />
        </div>

        <!-- 필터 선택 page -->
        <div v-if="step == 1">
          <div
            :class="selectFilter"
            class="upload-image"
            :style="{ backgroundImage: url(${url}) }"
          ></div>
          <div class="filters">
            <FilterBox
              :style="{ backgroundImage: url(${url}) }"
              :filter="filter"
              :url="url"
              v-for="filter in filterList"
              :key="filter.id"
            >
              <!-- 아래 {{ filter }} 는 slot 에 내려줄 데이터이다. -->
              <!-- <template v-slot:a
                ><span>{{ filter }}</span></template
              > -->
            </FilterBox>
          </div>
        </div>

        <!-- 글 작성 page -->
        <div v-if="step == 2">
          <div
            :class="selectFilter"
            class="upload-image"
            :style="{ backgroundImage: url(${url}) }"
          ></div>
          <div class="write">
            <textarea
              placeholder="글을 작성 해주세요:)"
              class="write-box"
              @input="$emit('uploadText', $event.target.value)"
            ></textarea>
          </div>
        </div>
      </div>
    </template>

    <script>
    import Post from "./Post.vue";
    import FilterBox from "./FilterBox.vue";
    import filterList from "../assets/data/instagramFilter";

    export default {
      name: "Container",
      components: { Post, FilterBox },
      data() {
        return {
          filterList: filterList,
        };
      },
      props: {
        post: Array,
        step: Number,
        url: String,
        selectFilter: String,
      },
    };
    </script>
    <style>...</style>

     

    FilterBox.vue

    <template>
      <div
        @click="fire"
        :class="filter"
        class="filter-item"
        :style="{ backgroundImage: url(${url}) }"
      >
        <!-- Container.vue 에서 v-slot 사용하여 데이터 내려줄 시 아래 slot 으로 받을 수 있다 -->
        <!-- <slot name="a"></slot> -->
        {{ filter }}
      </div>
    </template>

    <script>...</style>

    <hr />

    <h4><span style="color: #ff0000;">Post.vue</span></h4>
    <template>
      <div class="post">
        <!-- post-header -->
        <div class="post-header">
          <div
            class="profile"
            :style="{ backgroundImage: url(${post.userImage}) }"
          ></div>
          <span class="profile-name">{{ post.name }}</span>
        </div>
        <!-- @click="$store.commit('likesButton')"  -->
        <!-- class=" post-body" -->
        <!-- :class="selectFilter + ' post-body'" -->
        {{ selectFilter }}
        <div
          :class="selectFilter + ' post-body'"
          :style="{ backgroundImage: url(${post.postImage}) }"
        ></div>

        <!-- post-content -->
        <div class="post-content">
          <p>{{ post.likes }} Likes</p>
          <p>
            <strong>{{ post.name }}</strong
            >{{ post.content }}
          </p>
          <p class="date">{{ post.date }}</p>
        </div>
      </div>
    </template>

    <script>
    export default {
      name: "Post",
      props: {
        post: Object,
        selectFilter: String,
      },
    };
    </script>

    <style>...</style>

    <hr />

     

    #29347

    codingapple
    키 마스터

     Post.vue에 사진 class명에 내가 선택한 필터명을 넣으라고 썼나봅니다

    내가선택한 필터명말고 사진데이터에 있던 필터명을 넣어봅시다 

    #29361

    민재현
    참가자

    아.. 내가 선택한 필터명으로 반복 사용되서 모든 게시물에 같은 필터가 적용됐는데,

    사진데이터에 있는 필터명을 가져와 사용하니 각각의 필터를 적용하게 되는군요..

    업로드 한 게시물은 사진데이터에 저장되고 이를 사용하는 과정까지 다시 한번 알게 되었습니다.

    감사합니다:)

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠