Javascript 通过模型属性angularjs获取节点元素

Javascript 通过模型属性angularjs获取节点元素,javascript,angularjs,Javascript,Angularjs,有一种方法可以获取绑定模型属性的输入 我想在发送表单后模糊搜索输入, 我想动态地这样做,以便以后在html源代码中进行更改 示例: var-app=angular.module(“MyApp”,[]); 应用程序控制器('ctrl',函数($scope){ $scope.term='test'; $scope.submit=函数(){ document.querySelector('#search').blur(); //我想将document.querySelector(“#search”)

有一种方法可以获取绑定模型属性的输入

我想在发送表单后模糊搜索输入, 我想动态地这样做,以便以后在html源代码中进行更改

示例:

var-app=angular.module(“MyApp”,[]);
应用程序控制器('ctrl',函数($scope){
$scope.term='test';
$scope.submit=函数(){
document.querySelector('#search').blur();
//我想将document.querySelector(“#search”)替换为类似“getElementByProp($scope.term)”的内容
};
});

JS-Bin

这不可能的原因是,这不是您通常希望在Angular中执行的操作-您很可能仍然“像在使用jQuery一样思考”。请详细说明为什么要自己操作DOM。最有可能的是,这是一个不同的问题,您可以通过指令来解决


(这听起来可能是一个站不住脚的答案,但“不要这样做”很可能是处理这种情况的唯一正确方法。)

你的意图有一个根本性的错误

请始终牢记以下几点: 控制器应该对DOM一无所知

这是一条宝贵的经验法则,对你会有很大帮助

现在,当然您需要从javascript(AngularJS代码)与DOM交互,为此您应该使用指令

但在你的情况下,我会使用另一种方法:

if (document.activeElement) {
  document.activeElement.blur();
} 
这将适用于任何关注的元素,您不需要专门查询任何DOM元素。 所以在理论上,你没有给控制器任何关于DOM的知识,所以对我来说,这并没有违反我上面提到的规则

作为旁注,$documentforsomereaon并没有公开这个activeElement。
我没有时间深入研究代码以了解原因,但据我测试,您需要坚持使用本机文档对象。

一个简单的方法是使用AngularJS附带的jQuery小版本

试试这个:

var element = angular.element('[ng-model="YOUR_MODEL_NAME_HERE"]');
element.blur(); // element is a jQuery object

这应该会起作用

如果要按模型名称或模型值选择元素?模型名称(属性名称),则可以使用
document.querySelector()
document.querySelector('[data ng model=“term”]')
我知道这一点。我的问题不仅仅是这个场景,而是要知道angular本身是否有选择。那么我认为除了创建一个指令并在那里使用
element
之外没有其他选择。具体的用途是当表单提交时,输入字段将不再集中。关闭移动设备的键盘。还有更多的用途……理想情况下,这不是你必须自己做的事情。你测试过了吗?当我提交表单时,我的手机浏览器会自动关闭键盘。尽管如此,正如AlexCode所说,这并不是您希望在控制器中执行的操作。您可能正在制作自己的特殊输入指令来处理此问题。然而,您可以感觉到它即将到来:您将开始为每个表单元素制定定制指令,以完成一些您不必自己实现的事情。我会检查键盘未关闭是否还有其他原因。我尝试了此操作,但出现错误:
jqLite不支持通过选择器查找元素var el=document.getElementById(id);angular.element(el).on(“click”,function(){…};
我真正的问题是,我试图检索存在于
之外的
——不知道如何获取它。