加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何使Angular保持两个字段同步?

发布时间:2020-12-17 17:25:06 所属栏目:安全 来源:网络整理
导读:我正在学习Angular.作为练习,我正在转换使用jQuery的现有应用程序来使用Angular. 在我的页面上,我有两个输入.一个是组合框;另一个是文本输入. 当用户更改组合框中的选择时,除非用户在组合框中选择名为“自定义”的条目,否则文本输入将填充用户选择的文本.当
我正在学习Angular.作为练习,我正在转换使用jQuery的现有应用程序来使用Angular.

在我的页面上,我有两个输入.一个是组合框;另一个是文本输入.

当用户更改组合框中的选择时,除非用户在组合框中选择名为“自定义”的条目,否则文本输入将填充用户选择的文本.当用户选择“自定义”时,文本输入被清除,焦点自动移动到文本输入,供用户键入自定义值.

每当用户手动将焦点移动到文本输入并键入某些内容时,组合框的值将自动更改为“自定义”.

在Angular中进行此操作的适当方法是什么?

我想如果我有两个相同的文本输入,我可以将它们绑定到同一个模型,但这是不同的.我猜我必须捕获事件并手动更新模型,但我想听听更多有经验的人的意见.

解决方法

您可以在控制器中的$watch中包含一些逻辑,或者更喜欢ng-click和ng-change等指令.

我认为Nikos Paraskevopoulos的答案很好,但它并没有真正回答你关于聚焦/清除输入的问题.

这是我可能实现这一目标的一种方式.首先是HTML模板.

<input type="text"
       ng-model="vm.selected.value"
       ng-change="vm.inputChanged()"
       focus-when-empty>

<select ng-model="vm.selected.option" 
        ng-change="vm.selectionChanged()"
        ng-options="option for option in vm.options">
</select>

这很清楚.有单独的文本输入和选择模型,一些可供选择的选项和两个ng-change处理程序.控制器可能是这样的

app.controller('MainController',function() {
  var vm = this;

  // your options to select from
  vm.options = ['custom','one','two','three'];

  // current text input value and dropdown selection
  vm.selected = {
    value: null,option: null
  };

  // handle text input
  vm.inputChanged = function() {
    var index = vm.options.indexOf(vm.selected.value);
    vm.selected.option = index > 0 ? vm.options[index] : vm.options[0];
  };

  // handle dropdown
  vm.selectionChanged = function() {
    var index = vm.options.indexOf(vm.selected.option);
    vm.selected.value = index > 0 ? vm.selected.option : null;
  };
});

选择“自定义”时,专注于文本输入,有点棘手,所以它通过简单的focus-when-empty指令来处理.

app.directive('focusWhenEmpty',function() {
  return {
    restrict: 'A',scope: {
      ngModel: '='
    },link: function(scope,element) {
      // if there is no model,focus on element
      scope.$watch('ngModel',function(value) {
        if (!value) {
          element[0].focus();
        }
      });
    }
  };
});

另外,如果您在选项中键入任何值,则会相应地更新选择(因此它不再是“自定义”).

这是相关的plunker,希望它有所帮助! http://plnkr.co/edit/uJeV5L

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读