我试图了解如何正确地观察一些道具变异.我有一个父组件(.vue文件)从ajax调用接收数据,将数据放入一个对象并使用它通过v-for指令呈现一些子组件,简化我的实现:
<template>
<div>
<player v-for="(item, key, index) in players"
:item="item"
:index="index"
:key="key"">
</player>
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
...然后在<script>标签内:
data(){
return {
players: {}
},
created(){
let self = this;
this.$http.get('../serv/config/player.php').then((response) => {
let pls = response.body;
for (let p in pls) {
self.$set(self.players, p, pls[p]);
}
});
}
Run Code Online (Sandbox Code Playgroud)
item对象是这样的:
item:{
prop: value,
someOtherProp: {
nestedProp: nestedValue,
myArray: [{type: "a", num: 1},{type: "b" num: 6} ...]
},
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的孩子"玩家"组件中,我正在尝试观察任何Item的属性变化,我使用:
...
watch:{
'item.someOtherProp'(newVal){
//to work with changes in "myArray"
},
'item.prop'(newVal){
//to …Run Code Online (Sandbox Code Playgroud) 我目前正在webpack项目中使用带有Typescript的Vue.js.
正如我所推荐的配置中所示tsconfig.json:
"strict": true,
在我的一个组件里面我有:
declare interface Player {
cod: string,
param: string
}
export default Vue.extend({
name: 'basecomponent',
data() {
return {
players: []
};
},
created()
let self = this
axios.get('fetch-data')
.then((response) => {
let res: Players[] = response.data;
for(let i = 0; i < res.length; i++){
self.players.push(res[i]);
}
})
.catch((error: string) => {
console.log(error);
});
},
});
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时,我得到:
error TS2345: Argument of type 'Player' is not assignable to parameter of type 'never'.
Run Code Online (Sandbox Code Playgroud)
因为我相信 …
我有一个像这样的vue对象:
var vm = new Vue({
el: '#app',
data: {
items: [],
index: 0
},
});
Run Code Online (Sandbox Code Playgroud)
内部项目数组我将推送项目,如:
item1 = {
a: 1,
b: 'type',
c: '3.556'
}
...
itemN = {
a: n,
b: 'type',
c: '5.226'
}
Run Code Online (Sandbox Code Playgroud)
然后我会更新项目的"c"属性之一,我想设置一个观察者,一旦这个属性发生变化就会发出警告.
编辑:我也想知道女巫项目已经改变
我有一个返回 Promise 的函数,如下所示:
async function processFolder(folder) {
return new Promise(async (res) => {
const table = {};
const list = await getHTMLlist(folder);
if (list.length === 0) res(table);
for (let i = 0; i < list.length; i++) {
await processFile(folder, list[i], table);
}
res(table);
});
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 ESLint 来警告我:
“ Promise 执行器函数不应该是异步的”,即no-async-promise-executor规则,由于 Promise 声明中的 async 关键字而引发错误。
我已经在代码的其他部分修复了同样的问题,其中 Promise 中只有一个等待,使用ESLint 文档这一页上建议的技术并在这个答案中显示,但在我的用例中我真的不知道如何重构代码以避免该错误。有任何建议欢迎提出
基本上,我正在尝试实现一个函数,该函数始终返回与参数相同的“类型”的实现承诺
因此,如果我使用布尔值进行调用,它将返回一个已实现的Promise,如果我使用一个字符串参数进行调用,它将返回一个已实现的Promise,依此类推。
到目前为止我尝试过的是:
const PromiseOK = <T>(val: T): Promise<T> => {
return Promise.resolve(val);
};
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是正确的方法,在任何情况下,如果我尝试获得Promise <void>,它都会中断
任何建议将不胜感激
我有一个简单的javascript函数,如下所示:
function wrapVar (passVar) {
var option = {
varValue: passVar,
hide: true,
params: { ..otherparams.. }
};
return option;
}
Run Code Online (Sandbox Code Playgroud)
Eclipse和Aptana验证表明局部变量'option'是多余的.但在这种情况下"冗余"的含义对我来说并不清楚,我应该怎样做才能避免呢?
我有一个以 JSON 格式提供一些数据的服务器。我尝试用通常的方式获取这些数据:
$res = file_get_contents($url);
$result = json_decode($res);
var_dump($result);
Run Code Online (Sandbox Code Playgroud)
但 $result 还是一个字符串。问题是来自 file_get_content 的数据在数据之前有一些字母数字字符串,在数据之后有一个零。
就像是:
215ba
{"@attributes":{"ticker":"FCA"},"info...... // here all json data
0
Run Code Online (Sandbox Code Playgroud)
我已经直接从 url 检查了 json 有效性,并且格式正确,我无法理解零和 215ba 来自哪里。
显然我可以去掉字符串,消除两者,但我想知道是否有更具体的解决方案而不是解决方法
PS:不幸的是我不能使用cURL
我有一个接收一些道具并发出自定义事件的组件。我需要发出来将 props 的值作为参数传递。无论我做什么,我总是收到一个代理而不是原始值。这是我的实现的简化:
//child-component
<script setup lang="ts">
import { ref, unref } from "vue";
const props = defineProps<{
category: { id: number, label: string};
}>();
const emit = defineEmits(["sendcategory"]);
const category = ref(props.category);
const cat = unref(category);
function send() {
emit("sendcategory", cat);
}
<template>
<div @click="send" >
{{ category.value.label }}
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
这是父组件的示例
//parent-component
<script setup lang="ts">
import { ref } from "vue";
import ChildComponent from "./ChildComponent.vue";
const item = { id: 1, label: "testlabel" }
function getcategory(category: {id: number, …Run Code Online (Sandbox Code Playgroud) javascript ×4
vue.js ×4
promise ×2
typescript ×2
async-await ×1
eslint ×1
function ×1
generics ×1
json ×1
php ×1
redundancy ×1
variables ×1
vue-props ×1
vue-resource ×1
vuejs2 ×1