Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在哪里实现ng click功能、控制器或指令?_Javascript_Angularjs_Dom_Controller_Directive - Fatal编程技术网

Javascript 在哪里实现ng click功能、控制器或指令?

Javascript 在哪里实现ng click功能、控制器或指令?,javascript,angularjs,dom,controller,directive,Javascript,Angularjs,Dom,Controller,Directive,我是AngularJS的初学者,我理解大部分的技巧,但我仍然掌握着“文化” 我希望我的HTML、DOM、数据和通信之间有清晰的分离。 我对控制器的印象是一个实现了“数据”模型的模块,但没有UI语义(即DOM操纵)。 然而,在我的HTML中,如果我使用ng click,则为click函数实现访问控制器的作用域,这很可能需要回调到DOM中 所以,如果我不想在控制器中操纵DOM,我应该在哪里实现我的click函数呢?指令是这个问题的普遍答案吗 假设我在一个页面上有两个控件需要相互交互,我是否应该在这些

我是AngularJS的初学者,我理解大部分的技巧,但我仍然掌握着“文化”

我希望我的HTML、DOM、数据和通信之间有清晰的分离。 我对控制器的印象是一个实现了“数据”模型的模块,但没有UI语义(即DOM操纵)。 然而,在我的HTML中,如果我使用ng click,则为click函数实现访问控制器的作用域,这很可能需要回调到DOM中

所以,如果我不想在控制器中操纵DOM,我应该在哪里实现我的click函数呢?指令是这个问题的普遍答案吗

假设我在一个页面上有两个控件需要相互交互,我是否应该在这些控件的父控件上创建一个指令来实现两个子控件的单击功能?或者为每个控件创建一个指令,并可能将另一个控件的ID作为属性传递?或者是给父母和孩子的指令

---------更新1------------
下面的HTML是一个经过简化和精心设计的示例,[希望]能够说明我的问题

<div id="searchComponent">
    <input id="txtSearchText" ng-keyup="..."/>
    <input name="Go" id="btnDoSearch" ng-click="..."></input>
    <div id="autoCompleteResults"></div>
    <div id="fullResults"></div>
</div>

当用户在txtSearchText中键入时,将填充AutoCompleteResult,并考虑通常的最小字符数和超时。 当用户按下或单击btnDoSearch时,将清除/隐藏自动完成结果,并填充完整结果。 最后,如果用户开始键入新的txtSearchText,则会清除/隐藏完整的结果,并再次看到带有结果的AutoCompleteResult

任何指导都将不胜感激

所以,如果我不想在控制器中操纵DOM,我应该在哪里实现我的click函数呢?指令是这个问题的普遍答案吗

DOM操作
,在我看来,意思是类似于
document.querySelector()
addCliss
,等等。
ng click
是一个事件,它应该处理一些业务逻辑。把它放在控制器里就好了

当然,指令是您的另一种选择<代码>指令通常用于跨不同页面提取一些可重用组件,例如
模式
。如果在不同的控制器中重复一些代码,请考虑将它们提取到<代码>指令> <代码>或<代码>服务< /代码> .< 假设我在一个页面上有两个控件需要相互交互


简而言之:use,它是为这种场景而设计的。

一般原则是尽可能少地显式引用DOM。大多数(如果不是全部的话)您想做的事情都可以通过将HTML元素的一个方面绑定到$scope上的一个属性并操作该属性来完成。因此,您永远不必执行类似“现在isRed为真,将
的类更改为红色”之类的操作。相反,您应该添加一点代码来帮助说明。问题是在哪里实现keyup/click事件,因为它们将直接操作result div。感谢邵江,我同意控制器的业务逻辑意图,这就是为什么我试图删除UI语义。“DOM操作”可能更多地是关于重新加载jqGrid,或者显示/隐藏div,或者选择行等。比实际在DOM中注入HTML元素更多的事件。感谢Nik,我也同意使用范围属性,但我认为应该注意创建UI“标志”(如“showSearchResults”)。我最大的问题是调用jqGrid的GridUnload()函数