【问题标题】:'or', 'and' in ng-model angularjsng-model angularjs 中的“或”、“和”
【发布时间】:2016-11-04 12:22:29
【问题描述】:

我有一个项目列表,其中一些具有属性值,一些具有属性默认值。我需要使用 ng-repeat 将其绑定到输入 [文本]。
数组是这样的:

$scope.arr = [
 {value:'name'},
 {value:'dog'},
 {default:'cat'},
 {value:'lastName'},
 {default:'ring'}
];  

在 html 中:

<div ng-repeat='item in arr'>
 <input type='text' ng-model='item.value || item.default'>
</div>

它有效,但我在控制台“[ngModel:nonassign] http://errors.angularjs.org/1.5.8/ngModel/nonassign?p0=item.value%20%7C%7CNaNtem.default&p1=%3Cinput%20type%3D%22text%22%20ng-model%3D%item.value%20%7C%7C%item.default%22%20class%3D%22ng-pristine%20ng-untouched%20ng-valid%22%3E”中有错误消息。因为 ng-model 不适用于表达式.. 或许还有其他方法可以解决?

Plnkr example

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    你可以这样做:

    <div ng-repeat='item in arr'>
       <input type='text' ng-hide='item.default' ng-model='item.value'>
       <input type='text' ng-show='item.default' ng-model='item.default'>
    </div>
    

    Plunker example.

    【讨论】:

    • 谢谢!这是个好主意,但是当 value = '' (empty) 时,ng-show 会隐藏这个字段。所以也许我需要做一些检查,比如ng-show='fieldCheck(item)' 和$scope.fieldCheck = function(item) {if('value' in item) return true} - 例如..
    • @YoroDiallo 等一下,你有兴趣显示这两个字段吗?您期望的最终结果是什么?
    • 是的,我需要将所有对象粘贴到输入中。数组中的每个对象都有默认或值属性,它可以为空或有一些值,但我需要在输入中绑定它.. 所以当value = '' 我可以从输入中填充它(在输入中写一些东西)
    • 我不太确定我是否理解您要执行的操作。如果您想要两个输入字段,一个作为默认值,另一个作为默认值,那么只需删除ng-show。如果您想显示一个或另一个已填充的内容,那么我的答案中的解决方案。
    • 啊,好的。现在我明白了。将快速更新我刚才的答案。
    【解决方案2】:

    您可以尝试创建第二个数组,仅使用单一类型的对象并将其绑定到视图。 然后,您可以观察更改并将值重新分配给原始数组。 它更像是一种介于控制器模型和视图之间的 MVVM 方法(创建“视图模型”)。

    【讨论】:

      【解决方案3】:

      $scope.valueOrDefault = function (item){ return item.value|| item.default; }

      和 HTML

      <div ng-repeat='item in arr'> <input type='text' ng-model='valueOrDefault(item)'> </div>

      【讨论】:

        猜你喜欢
        • 2015-07-14
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        相关资源
        最近更新 更多