【问题标题】:Binding ngModel to expression's value将 ngModel 绑定到表达式的值
【发布时间】:2015-05-01 17:30:10
【问题描述】:

我有一个场景,属性 ng-model 应该绑定到来自数据库的值作为业务逻辑的一部分。

为简单起见,我创建了这个example

function TodoCtrl($scope) {
    $scope.field1 = "PropertyFromDB";
    $scope.PropertyFromDB = "hello world";
}

<div ng-app>
  <h2>ngModel BINDING EXAMPLE</h2><br/>
  <div ng-controller="TodoCtrl">
      <div ng-init="imod = field1">
          <input type="text" ng-model="imod"></input>
      </div>
  </div>
</div>

在此示例中,field1 是来自 DB 的属性值(即 PropertyFromDB),并且 ng-model 应绑定到 PropertyFromDB 而不是 field1。 所以,就像我想在 ng-model 的表达式语法中评估表达式,但我无法这样做。

谢谢

【问题讨论】:

    标签: javascript angularjs angularjs-scope angularjs-ng-model


    【解决方案1】:

    可以使用this 引用当前范围并读取其属性,例如:

    <div ng-init="imod = field1">
      <input type="text" ng-model="this[imod]"></input>
    </div>
    

    但这是创建视图模型的一种非常不寻常且不方便的方式。

    我建议创建一个更好的结构/对象,其中包含字段/值组合并将该对象设置在范围内,而不是在范围内分别设置字段和值。

    【讨论】:

    • 谢谢。这就是我一直在寻找的。上面的示例是我实际实现的精简版本,因此字段和值分别在范围内。基本上我试图完成这样的事情:- 但是 ng-model 不允许,传递的值中的表达式所以我不得不采取 ng-init 路线。如果有更好的方法来实现这一点,请告诉我。再次感谢您。
    • @miztaken,你根本不需要ng-init——同样可以用this[field1]来完成。但此外,为什么需要在作用域上设置正确的值而不是创建对象为suggested by @pankajparkar?如果必须,为什么将其作为值名称本身取决于 field1 的值 - 为什么不静态调用它 value1
    • 是的,你是对的。我只是出于演示目的而将值保留在范围上。我的业务逻辑决定了 ngModel 应该映射到哪个字段,例如,我在范围级别对其进行了编码,这就是我不能保持静态的原因。感谢您的帮助。这就是我将如何使用它jsfiddle.net/miztaken/ns0utq9b
    【解决方案2】:

    您根本无法使用任何表达式设置ng-model 的值。另一种方法是更改​​您从服务器返回的 JSON 的结构。

    标记

    <div ng-controller="TodoCtrl">
        <div ng-repeat="field in properties">
            <label>{{field.property}}</label>
            <input type="text" ng-model="field.value" />
        </div>{{properties}}
    </div>
    

    代码

    function TodoCtrl($scope) {
    
        $scope.properties = [{
            property: 'PropertyFromDB',
            value: "hello world"
        }, {
            property: 'PropertyFromDB1',
            value: "hello world1"
        }]
    }
    

    Fiddle Here

    【讨论】:

    • 您好 Pankaj,感谢您的回复。我认为这不起作用,因为在您的示例中,ng-model 仍然直接绑定到 field.value,而不是 field.value 指向的属性。我希望 ng-model 绑定到由 field1 的值指出的属性,即 PropertyFromDB。所以,基本上我正在尝试做这样的事情:-
    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 2019-10-12
    • 2018-03-20
    • 2017-04-04
    • 2021-10-18
    • 2018-09-03
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多