javascript - 如何在网络爬虫中以编程方式设置 Angular JS 选择值?

标签 javascript angularjs

问题是我没有代码库,我只想要一个快速函数,可以在大约 150 个下拉选择字段中选择我的预定义值。看来简单的赋值不起作用:

document.getElementById('myId').value = 'myValue';

看来这种方式 Angular 变化检测没有被触发。视觉上所有字段都已更新。

最佳答案

创建一个新的dom Event()并使用dispatchEvent()在您设置值的每个元素上触发它。

演示:

/// Outside angular app
const newVals= [
  {id:'sel1', val :'1'},
  {id:'sel2', val :'2'},
];

const setValue = ({id, val})=>{
    const el = document.getElementById(id);
    el.value = val;
    console.log('Triggering change on id =', id)
    el.dispatchEvent(new Event('change'))
}

// delay to let angular render
setTimeout(() => {
  newVals.forEach(setValue)
}, 500)
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MainCtrl as $ctrl">

  Sel1 :
  <select id="sel1" ng-model="$ctrl.sel1" ng-change="$ctrl.logChange($ctrl.sel1)">
    <option value=""></option>
    <option value="1">One</option>
    <option value="2">Two</option>
  </select>
  Sel2 :
  <select id="sel2" ng-model="$ctrl.sel2" ng-change="$ctrl.logChange($ctrl.sel2)">
    <option value=""></option>
    <option value="1">One</option>
    <option value="2">Two</option>
  </select>
</div>

<script>
  // Angular App
  angular.module('myApp', []).controller('MainCtrl', function() {
    this.logChange = (val) => {
      console.log('Angular change event triggered, new value =', val)
    }
  });
</script>

关于javascript - 如何在网络爬虫中以编程方式设置 Angular JS 选择值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55457024/

相关文章:

javascript - 返回服务对本地存储的 Angular 数据的 promise

javascript - 绘图管理器标记监听器 Position_Changed

javascript - 在再次递归调用函数之前结束该函数

javascript - Webpack 成功构建,但 JavaScript 不执行运行时

javascript - 开始使用 Leap Motion

javascript - 有条件地在 Controller 中接收同步或异步对象( Angular 、 ionic )

javascript - 为什么 div 不采用全宽或 100% 宽度?

javascript - 在 akka 中定义额外的路径

html - 如何从选择 > 选项调用 AngularJS 函数

angularjs - 在 Angularjs/Bootstrap 中,为什么我的取消按钮会调用提交事件