我正在尝试将我的代码更新为es6。
除了这部分,我将所有其他代码更新为es6语法。
我理解解构的主要概念(也许?),
但我不知道如何对此代码进行解构(const userData
部分)。
我想让这段代码更干净。
$scope.doRegister = (registerForm) => {
const userData = {
emailAddress: $scope.registerData.email,
password: $scope.registerData.password,
firstName: $scope.registerData.first,
lastName: $scope.registerData.last
};
userService.registerUser(userData)
.then((userData) => {
$ionicHistory.nextViewOptions({ historyRoot: true });
$state.go('app.deviceSetup');
})
.catch((err) => {
console.error(err);
});
}
答案 0 :(得分:3)
您实际上是在尝试将$scope.registerData
“解构”为新对象userData
。但是,解构只支持解构为变量,而不是对象。因此,你可以写:
const {
email: emailAddress,
password,
first: firstName,
last: lastName
} = $scope.registerData;
const userData = {emailAddress, password, firstName, lastName};
上面的第一行是解构;第二行使用“速记属性表示法”来构建新对象。
这里有关于如何构建新对象的提议和许多问题,但没有简单明了的方法可以做到这一点。你最接近的可能就是使用object rest syntax,只有当你知道想要省略哪些属性,不允许重命名,创建额外的变量dontNeed1
等时,它才会起作用,可能会也可能不会有原生浏览器支持。
const {...userData, dontNeed1, dontNeed2} = ...$scope.registerData;
在这种情况下,这当然是一个可行的选择,或者甚至可能更好,根本不尝试使用解构,和/或使用@BrianMcCutchon的方法。
答案 1 :(得分:3)
我不认为解构是这样做的正确方法。但是,还有其他方法可以清除此代码。最简单的方法是将$scope.registerData
保存到临时变量:
const rd = $scope.registerData
const userData = {
emailAddress: rd.email,
password: rd.password,
firstName: rd.first,
lastName: rd.last
};
不要误解我,你可以使用解构,但你最终不得不在某处复制字段名称。这更清洁了。