代码之家  ›  专栏  ›  技术社区  ›  trubliphone

angularjs双向绑定内ng重复

  •  0
  • trubliphone  · 技术社区  · 7 年前

    我有一个角度控制器变量,定义了我想要在模板中渲染的一系列字段的外观。我的基础模型的初始值正确地显示在输入元素中,但当我更改该元素的内容时,它不会更改。

    以下是一些代码:

    应用程序。js公司

    (function() {
      var app = angular.module("my_app", []);
        app.controller("MyController", function() {
          var my_controller = this;
          my_controller.model = {
            "first_name": "fred",
            "last_name": "jones"
          }
          my_controller.fields = [
             {
              "name": "first_name",
              "label": "First Name",
              "is_required": true,
              "model": my_controller.model.first_name
             },
            {
              "name": "last_name",
              "label": "Last Name",
              "is_required": true,
              "model": my_controller.model.last_name
             }
           ]
    })();
    

    样板html:

    <div ng-app="my_app">
      <div ng-controller="MyController as my_controller">
        <div ng-repeat="field in my_controller.fields">
          {% verbatim ng %}
            <label for="id_{{ field.name }}" ng-class="field.is_required ? 'required' : 'optional'">{{ field.label }}:&nbsp;</label>
            <input type="{{ field.type }}" class="form-control" name="{{ field.name }}" id="id_{{ field.name }}" ng-model="field.model">
          {% endverbatim ng %}
         </div>
      </div>
    </div>
    

    (不要担心“{%verbatim ng%}”之类的东西-我正在使用Django的b/c就在那里。)

    这将正确显示初始值分别为“fred”和“jones”的两个输入字段。但当我更改这些字段中的值时,对 my_controller.model

    有什么提示吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Stanislav Kvitash    7 年前

    这样做 "model": user_controller.model.first_name 将只为 model 字段,它不会创建对的引用 my_controller.model.field_name .

    bracket notation 修改 my_controller.model 领域:

    angular.module('app', [])
    .controller('testController',
      function testController($scope) {
      
          var my_controller = this;
          
          my_controller.model = {
            first_name: "fred",
            last_name: "jones"
          };
          
          my_controller.fields = [
             {
              "name": "first_name",
              "label": "First Name",
              "is_required": true
             },
            {
              "name": "last_name",
              "label": "Last Name",
              "is_required": true
             }
           ];
           
    });
    <body ng-app="app">
    <div class="table-responsive" ng-controller="testController as my_controller">
          <div ng-repeat="field in my_controller.fields">
      
            <label for="id_{{ field.name }}" ng-class="field.is_required ? 'required' : 'optional'">{{ field.label }}:&nbsp;</label>
            <input type="{{ field.type }}" class="form-control" name="{{ field.name }}" id="id_{{ field.name }}" ng-model="my_controller.model[field.name]">
    
         </div>
         -----------------------------------
         <br/>
         <code>{{my_controller.model}}</code>
    </div>
    </body>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>