vue.js - 是否总是需要在数据中声明属性:{ }
问题描述
在之前使用过 AngularJS 之后,我开始熟悉 Vue.js,我想知道是否有任何方法可以绕过在 data { } 中显式声明每个数据属性。
在 AngularJS 中,将 ng-model 声明为 HTML 属性就足够了,当应用程序初始化时,它会将它们添加到作用域中,以便可以读取/操作它们。
我担心的是,我正在制作一个包含大约 100 个单独属性的技术计算器,并且两次声明每个属性似乎是多余的。
Vue 是否提供隐式获取模型属性而不在应用程序数据中明确声明它们?
示例 AngularJS 没有在应用程序中显式声明模型属性:
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<div ng-app="exampleApp" ng-controller="exampleController">
<input ng-model="firstName" ng-change="makeName()">
<input ng-model="lastName" ng-change="makeName()">
<input ng-model="fullName">
</div>
<script>
angular.module("exampleApp", []).controller("exampleController", function ($scope) {
$scope.makeName = function () {
$scope.fullName = $scope.firstName + " " + $scope.lastName;
}
});
</script>
Vue.js 中或多或少相同的应用程序:
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<div id="exampleApp">
<input v-model="firstName" v-on:input="makeName">
<input v-model="lastName" v-on:input="makeName">
<input v-model="fullName">
</div>
<script>
var app = new Vue({
el: '#exampleApp',
data: {
firstName: "",
lastName: "",
fullName: ""
},
methods: {
makeName: function () {
this.fullName = this.firstName + " " + this.lastName;
}
}
});
</script>
解决方案
是的,对于 HTML 模板中使用的任何“变量”,都必须在 JS 中声明。
虽然当你有很多变量时这看起来很烦人,但这很重要,因为变量可以是许多反应性事物中的任何一种——简单变量、计算属性、方法等。不可能知道要创建什么也没有一些语法来指定应该创建什么类型的变量,或者指定任何默认值。
在您的示例中,fullName
可能应该将其指定为computed
属性-例如:
computed: {
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
这样就不需要 v-on:input - 当firstName
和lastName
变量更新时,这将触发fullName
重新计算。
推荐阅读
- github - 使用 jgit 自动创建拉取请求
- actions-on-google - 对话流程 - 与 Google 助理的集成问题
- javascript - 不能在我的 Ionic 应用程序上设置 Null 的属性 InnerHTML?
- java - 查找 HashMap 中保存的相邻对象之间的距离
- javascript - 如何在 div 上保持纵横比 16/9 并且不让它在容器外流血?
- python - 取实部或虚部使数组在 numpy 中不是 C 连续的
- python - 将值列表从python脚本一一传递到html页面
- javascript - 在Javascript中一个接一个地运行倒数计时器
- sql - 如何在 SQL Server 中将行合并为单行
- javascript - 如何在jquery中使用`this`调用多个id