有没有办法根据它在 vuex 中的属性来选择 return 的对象?
is there a way to choose which object to return based on it's attribute in vuex?
我有一个名为 Employees 的对象数组,我正在尝试获取 department_id=3 的对象,我不想返回到 laravel 并发出另一个请求,所以是有办法用 vuex 做到这一点吗?
"id": 25,
"name": "name",
"email": "name@gmail.com",
"last_name": "lastname",
"phone": "98745632",
"gender": "Male",
"nationality": "Tunisian",
"school": "ISIMM",
"experience_level": "2",
"source": "Linkedin",
"hiring_date": "2020-04-17",
"end_contract": "2020-04-18",
"position": "web developer",
"grade": "Junior",
"contract": "Cdi",
"department_id": 1,
"company_id": 1,
"archived": "0",
"img": null,
"supervisor_id": 1,
"ipAdress": null,
"last_login_at": null,
"department": {
"id": 1,
"name": "mobile"
},
这是
状态:
const employee = {
state: {
Employees: [],
sysAdmins: [],
},
这是
吸气剂:
sysAdmins: (state) =>
state.Employees.map((element) => (element.department_id = "3")),
Employees: (state) => state.Employees,
这是
突变:
getsysAdmins(state, employees) {
state.sysAdmins = employees;
},
getEmployees(state, employees) {
state.Employees = employees;
},
这是
操作:
getEmployees(context) {
const config = {
headers: {
"x-api-key": process.env.VUE_APP_SIRH_X_API_KEY,
Authorization: localStorage.getItem("access_token"),
},
};
return new Promise((resolve, reject) => {
axios
.get("/employees/all_employees", config)
.then((response) => {
context.commit("getEmployees", response.data.data.users);
context.commit("getsysAdmins", response.data.data.users);
resolve(response);
})
.catch((error) => {
reject(error);
});
});
},
试试这个..
使用console.log
检查结果以确保其确定。
const newValue = {
...JSON.parse(localStorage.getItem("Employees")),
department.id: 3
}
localStorage.setItem("Employees", JSON.stringify(newValue))
或
// Get the user from localStorage and parse into object
let department = JSON.parse(localStorage.getItem("Employees"));
// Update an attribute on the user object
Employees.department.id = 2;
// Update the user in localStorage and stringify to string
localStorage.setItem("Employees", JSON.stringify(Employees));
如果我没理解错的话,你想return while Employee 对象是在某个部门工作的员工。
您可以通过过滤 Employees 数组来做到这一点。我会这样写:
getters: {
employees: (state) => state.Employees,
sysAdmins: (state) => state.Employees.filter((employee) => employee.department_id === 3),
// If your DB returns a string as the department_id, you'll have to check against "3"
}
如果 sysAdmins 始终是员工的子集,则始终使用 getter 而不是将它们放在状态中的单独数组中更有意义。
一些其他注意事项:
- 你的突变被称为 get...
而这些是 setter,最好重命名它们。
- 在您的操作中,您当前设置与员工和系统管理员相同的结果。同样,我只设置员工并始终从该数组中过滤系统管理员。
我有一个名为 Employees 的对象数组,我正在尝试获取 department_id=3 的对象,我不想返回到 laravel 并发出另一个请求,所以是有办法用 vuex 做到这一点吗?
"id": 25,
"name": "name",
"email": "name@gmail.com",
"last_name": "lastname",
"phone": "98745632",
"gender": "Male",
"nationality": "Tunisian",
"school": "ISIMM",
"experience_level": "2",
"source": "Linkedin",
"hiring_date": "2020-04-17",
"end_contract": "2020-04-18",
"position": "web developer",
"grade": "Junior",
"contract": "Cdi",
"department_id": 1,
"company_id": 1,
"archived": "0",
"img": null,
"supervisor_id": 1,
"ipAdress": null,
"last_login_at": null,
"department": {
"id": 1,
"name": "mobile"
},
这是 状态:
const employee = {
state: {
Employees: [],
sysAdmins: [],
},
这是 吸气剂:
sysAdmins: (state) =>
state.Employees.map((element) => (element.department_id = "3")),
Employees: (state) => state.Employees,
这是 突变:
getsysAdmins(state, employees) {
state.sysAdmins = employees;
},
getEmployees(state, employees) {
state.Employees = employees;
},
这是
操作:
getEmployees(context) {
const config = {
headers: {
"x-api-key": process.env.VUE_APP_SIRH_X_API_KEY,
Authorization: localStorage.getItem("access_token"),
},
};
return new Promise((resolve, reject) => {
axios
.get("/employees/all_employees", config)
.then((response) => {
context.commit("getEmployees", response.data.data.users);
context.commit("getsysAdmins", response.data.data.users);
resolve(response);
})
.catch((error) => {
reject(error);
});
});
},
试试这个..
使用console.log
检查结果以确保其确定。
const newValue = {
...JSON.parse(localStorage.getItem("Employees")),
department.id: 3
}
localStorage.setItem("Employees", JSON.stringify(newValue))
或
// Get the user from localStorage and parse into object
let department = JSON.parse(localStorage.getItem("Employees"));
// Update an attribute on the user object
Employees.department.id = 2;
// Update the user in localStorage and stringify to string
localStorage.setItem("Employees", JSON.stringify(Employees));
如果我没理解错的话,你想return while Employee 对象是在某个部门工作的员工。 您可以通过过滤 Employees 数组来做到这一点。我会这样写:
getters: {
employees: (state) => state.Employees,
sysAdmins: (state) => state.Employees.filter((employee) => employee.department_id === 3),
// If your DB returns a string as the department_id, you'll have to check against "3"
}
如果 sysAdmins 始终是员工的子集,则始终使用 getter 而不是将它们放在状态中的单独数组中更有意义。
一些其他注意事项:
- 你的突变被称为 get...
而这些是 setter,最好重命名它们。
- 在您的操作中,您当前设置与员工和系统管理员相同的结果。同样,我只设置员工并始终从该数组中过滤系统管理员。