angularjs - 如果值来自ng-model,angularjs在相应的HTMLinput上调用select不会突出显示单元格内容?
问题描述
我正在尝试选择(突出显示)其值来自模型的输入元素中的文本,但它似乎不起作用。
有问题的元素(组件模板的一部分)如下:
<input id="table-input-cell" ng-blur="$ctrl.inputBlur()"
ng-focus="$ctrl.inputFocus($event)" ng-model="$ctrl.activeText"
class="input-cell"/>
控制器函数如下所示:
ctrl.inputFocus = function(focusEvent) {
let el = ctrl.inputView[0];
console.log(el.constructor.name);
console.log(`inputFocus called. contents: ${el.value} `);
el.select();
};
我在页面上看到的结果是这样的:
我想看到的是:
这是控制台输出:
HTMLInputElement
budget_controller.source.js:261 inputFocus called. contents:
所以看起来问题是ng-focus
在输入框的值被填充之前可能会被调用ng-model
,这就是为什么.select()
不突出显示任何内容的原因。
或者也许是别的什么?无论如何,一旦元素被绑定为具有焦点,AngularJs 中是否还有其他一些生命周期事件可以用来设置选择范围?我在 dox 中没有看到任何东西 ngBound= 。
解决方案
使用事件目标:
ctrl.inputFocus = function(focusEvent) {
̶l̶e̶t̶ ̶e̶l̶ ̶=̶ ̶c̶t̶r̶l̶.̶i̶n̶p̶u̶t̶V̶i̶e̶w̶[̶0̶]̶;̶
let el = focusEvent.target;
console.log(el.constructor.name);
console.log(`inputFocus called. contents: ${el.value} `);
el.select();
};
PLNKR 上的DEMO
推荐阅读
- apache-spark - Pyspark Streaming - Windows 行为与 Linux 缺失行
- selenium - Selenium c# MSTest Specflow 对另一台设备执行测试
- reactjs - (next 10) - 将 basePath 添加到 next.config.js 时,next-pwa 不起作用
- amazon-web-services - AWS全球与AWS中国的区别
- specflow - 你能指定在多个场景中执行哪些示例吗?
- java - 你能告诉 Java 根据它通过 java.util.scanner 收到的输入创建一个新变量吗?
- hyperledger-fabric - 从 Hyperledger Fabric v2.0 恢复备份
- google-cloud-platform - BigQuery 使用 bq 加载函数将 .txt 文件加载到表中
- api - 使用 REST API 从 Nexus 中删除已发布的版本
- elasticsearch - Elasticsearch 中 PIT 的成本?