在JavaScript中定义的Angular.js模型中,需要将一个属性作为函数进行评估
Angular.js model defined in JavaScript, one property needs to be evaluated as a function
我在JS中定义了我的模型,如下所示:
$scope.requirement = {
id: function() {
if($scope.dada || $scope.lala) {
return $scope.dada
}
return $scope.haha
}
}
这些变量是无稽之谈,但假设它们是定义的(在我的情况下,这只是一个例子)。
然后在带有Angular指令的HTML中,我有一个这样的输入:
<input type="text" ng-model="requirement.id" placeholder="ID">
函数返回的值不是requirement.id
的值。我如何传递上面这样的函数,但让Angular.js计算函数并使用返回值?
编辑:
我尝试了这个,但没有成功:
$scope.requirement = {
id: null
}
if($scope.dada || $scope.lala) {
$scope.requirement.id = $scope.haha;
}
当我运行console.log(requirement)
时,值会发生更改,但它并不代表视图中的新值。视图中的输入仍然显示null
如果要进行双向绑定,则需要将id
定义为具有一个参数的getter/setter函数。因此,当传递一个值时,它充当一个setter,更新模型。否则,它只会根据您的逻辑获得当前值。
$scope.requirement = {
id: function(newId) {
if (arguments.length) {
$scope.dada = newId;
}
return ($scope.dada || $scope.lala) ? $scope.dada : $scope.haha;
}
}
您必须更新输入元素并添加ng模型选项属性。
<input type="text" ng-model="requirement.id" ng-model-options="{ getterSetter: true }" />
如果您只是在谈论单向绑定,那么您不需要使用getter/setter或ng模型。
<input type="text" value="{{requirement.id()}}" readonly />
ng模型是双向绑定的,您定义它的方式是requirement.id返回一个函数对象(它不执行函数),但更重要的是,当人们填写您的输入字段时,它会覆盖该对象,因为您告诉Angular将输入框的值放入requirement.id变量中。如果您只需要获取值,请使用{{requirement.id()}}或更可读的{{requirement.getId()}}。
如果您确实需要使用函数进行双向绑定,请使用Daniel的解决方案。
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 你能用来自数组的属性名称生成一个对象吗
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- AngularJS:如何用同一对象的另一个属性访问一个属性
- 如何为下拉列表的每个选项添加一个属性
- 如果另一个属性相同,请删除该属性
- Knockout observable没有观察到其中一个属性
- 使用数据属性将HTML数据复制到另一个元素
- 将javascript对象(属性+值)合并到一个对象中
- 使用 JavaScript 一次为一个元素设置多个属性
- 我如何选择/点击一个带有for=“”的元素"属性[量角器]
- 如何计算一个对象中五个属性中有多少是非null的
- 检查来自不同数组的两个元素的一个属性是否相等
- 获取一个对象´s属性的名称使用字符串
- 选择一个元素,使其最近的具有特殊属性的父元素具有特殊值
- JavaScript-通过类似的属性查找对象,并将其推送到一个新的数组中
- 在html页面的属性周围添加了一个额外的空间
- 谷歌闭包编译器内联了一个重复使用的私有属性 - 一个缺陷还是我错过了什么
- 给一个嵌套的属性/属性一个自定义值