【问题标题】:Angular.js - refresh view ng-options after modify dataAngular.js - 修改数据后刷新视图 ng-options
【发布时间】:2016-12-15 16:48:01
【问题描述】:

我使用 ng-options 进行选择,它使用来自控制器之一的数据。数据是 ajax 在应用程序开始时检索到的二维数组,键值对如下:

'option1' : array[ 1: "Test", 2: "Test2" ],
'option2' : array[ 12: "abc", 26: "zyc" ],
'option3' : array[ 14: "fdfd", 27: "fdf" ],
'option4' : array[ 15: "dff", 28: "dffd" ],

并查看:

<select name="selectedLink" id="selectedLink" ng-model="selectedLink" ng-options="key as value for (key , value) in links[selectedType]" ng-change="changeLinkName()" placeholder="Please Select" class="annotation-element">

应用启动时一切正常,但修改我的链接数组后出现问题。用户可以添加新元素,它看起来像:

// Watch new element variables
$scope.addNewElement = function() {
    var newElement = $('#inputElementId').val();
    // (...)
    $scope.links[newElement[0]][newElement[1]] = newElement[2];
    $scope.selectedLink = newElement[1];
    // (...)
};

问题是视图没有刷新。选择选项中仍然只有旧的链接数组数据。我尝试使用 $scope.$apply,但它不起作用。

我只能使用jquery“重绘”所有选项,但是我不能使用ng-model,ng-change等。我应该怎么做才能在更改数组数据后触发刷新UI?

【问题讨论】:

  • 如果可能,请发布小提琴。我还看到你正在使用var newElement = $('#inputElementId').val(); - 我不明白你为什么不使用directive或“绑定”方法——Angular的主要优势。
  • 由于数据“传输”,我使用隐藏字段。我的应用程序在 iframe 中运行,并且在其他 iframe 交互后由父函数设置字段 - 页面通过 fancybox 加载表单,在保存数据通过主窗口到 Angular 应用程序 iframe 之后。

标签: angularjs ajax refresh ng-options angularjs-ng-options


【解决方案1】:

这是一个工作示例。如果您从 '[ng-click]` 调用“添加”功能,它应该会更新。

angular.module('app', [])
  .controller('someCtrl', function ( $scope ) {
    $scope.opts = [
      {id: '1', name: 'Option 1'},
      {id: '2', name: 'Option 2'},
      {id: '3', name: 'Option 3'}
    ];
    $scope.model = $scope.opts[0];
  
    $scope.add = function () {
      var idx = $scope.opts.length + 1;
      $scope.opts.push({ id: idx, name: 'Option ' + idx });
    };
  });

angular.element(document).ready(function () {
    angular.bootstrap(document.querySelector('#app'), ['app']);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>

<div id="app" ng-controller="someCtrl">
  <button type="button" ng-click="add()">Add</button>
  <hr>
  <select ng-model="model" ng-options="o.name for o in opts"></select>
</div>

【讨论】:

  • 我测试了几个选项,并使用新的 select nad 简单数组 + 带有 ng-click 的按钮,它工作正常 - 在两种情况下(用户交互和通过 trigger() 点击)。不幸的是,在主阵列上它不起作用。我将数据从二维数组移动到变量(每次更新后)并且......仍然没有。
  • 您能创建一个代码示例吗?使用您的确切 (ng-) 选项?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2023-03-28
相关资源
最近更新 更多