vuejs检测模型是否已更新的计算数据

时间:2018-03-09 01:22:15

标签: javascript vue.js immutability

我正在尝试检测Vue计算数据中是否未更改模型数据。

我有两组需要检查的变量, 在Computed之前:filteredItems应返回一个新列表或当前列表。

以下是我正在检查的两个数据

  • 文字(文字输入)
  • selectedInput(当前选定的项目)

当前行为:

我已将 selectedInput 更改为null,此更新Computed:filteredList将被触发。这是预期的。

第一个条件是确保此更新返回当前列表,如果 text === selectedInput.text ,按预期工作

但是,我需要第二个条件来检测文字是否未被更改。

<input v-model="text" />
<ul>
   <li v-for="item in filteredItems" @click="text=item.text"></li>
</ul>

{
  data():{
     text: 1,
     items: [],
     tempList: [],
     selectedItem: {text: 1}
  },
  computed: {
     filteredItems(){
        // when selectedItem.text === current text input, do not run
        if (this.selectedItem.text === text) return this.tempList;

        // how do i detect if selectedItem.text has not been changed
        if (this.selectedItem.text.hasNotChange??) return this.tempList;
     }
  }
}

数据流:1更新文本&gt; 2过滤器列表&gt; 3单击listItem,更新(1)文本

  1. [输入(文字):类型更新]&gt;
  2. [li(filteredItem):按值(文本)和(selectedInput.text)的类型过滤列表]&gt;
  3. [li(item)@click:update(1),还有另一个值(selectedInput.text)输入(文本)等于(item.text)]
  4. 此循环有效,直到我在其他地方执行更新selectedInput.text

    的操作

    对于文本模型,我可以使用setter / getter做些什么。

2 个答案:

答案 0 :(得分:0)

创建变量from django.db import models from customuser.models import User from django.db.models.signals import post_save from django.dispatch import receiver class Status(models.Model): status = models.CharField(max_length=50) class Position(models.Model): position = models.CharField(max_length=40) class Role(models.Model): role = models.CharField(max_length=50) class Company(models.Model): company = models.CharField(max_length=50) class Profile(models.Model): P = 'partner' U = 'user' TYPE_CHOICES = ( (P, 'partner'), (U, 'user'), ) user = models.**OneToOneField**(User, on_delete=models.CASCADE) user_type = models.CharField(max_length=10, choices=TYPE_CHOICES, default="U") name = models.CharField(max_length=50, blank=True) surname = models.CharField(max_length=50, blank=True, default = None) avatar = models.ImageField(upload_to = 'images/profile/%Y/%m/%d/', blank=True, null=True) position = models.ForeignKey('Position',blank=True, default=None) role = models.ForeignKey('Role', blank=True, default=None) company = models.ForeignKey('Company',blank=True, default=None) status = models.ForeignKey('Status', blank=True, default=None) @receiver(post_save, sender=User) def create_or_update_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) instance.profile.save() 。观看changed,并将selectedItem.text设置为changed。在true上的观察者中,将text设置为changed

答案 1 :(得分:0)

我使用临时变量

让这个工作
data(){
   return: {
      text: "",
      temp: {
         text
      }
   }
}

computed(){
   filteredList(){
       var temporaryList,originalList,filteredList


       if ((this.text === $store.state.selectedText )||
           (this.text === this.temp.text ) ) {
                return temporaryList || originalList
           }

       // update
       this.temp.text = this.text

       return filteredList
   }
}

认为在Computed方法中更新变量是不好的做法。