Javascript 如何在AngularJS控制器中获取当前范围dom元素?
我有一份清单。在每个outerItem中,我都有一个innerItems列表。它们是动态排序的 当鼠标光标指向某个innerItem时,我必须在该innerItem元素的正上方显示弹出窗口 Popup div是body的子项,因为我不希望每个innerItem都有单独的弹出窗口 在我看来,在Javascript 如何在AngularJS控制器中获取当前范围dom元素?,javascript,jquery,dom,scope,angularjs,Javascript,Jquery,Dom,Scope,Angularjs,我有一份清单。在每个outerItem中,我都有一个innerItems列表。它们是动态排序的 当鼠标光标指向某个innerItem时,我必须在该innerItem元素的正上方显示弹出窗口 Popup div是body的子项,因为我不希望每个innerItem都有单独的弹出窗口 在我看来,在ng mouseover上,我调用了将左/顶属性设置为绝对位置弹出窗口的函数。因此,对于每个innerItems,我想调用jQuery.offset()方法,从页面左上角为我提供左/顶值 那个么,如何获取当前
ng mouseover
上,我调用了将左/顶属性设置为绝对位置弹出窗口的函数。因此,对于每个innerItems,我想调用jQuery.offset()
方法,从页面左上角为我提供左/顶值
那个么,如何获取当前范围元素的jQuery对象呢?或者,如果我在控制器中选择了错误的方式:
function innerItem($scope, $element){
var jQueryInnerItem = $($element);
}
更好、正确的解决方案是制定一个指令。无论是在指令的控制器中还是在主控制器中,范围都是相同的。使用
$element
执行DOM操作。指令控制器中定义的方法可在主控制器中访问
例如,查找子元素:
var app = angular.module('myapp', []);
app.directive("testDir", function () {
function link(scope, element) {
}
return {
restrict: "AE",
link: link,
controller:function($scope,$element){
$scope.name2 = 'this is second name';
var barGridSection = $element.find('#barGridSection'); //helps to find the child element.
}
};
})
app.controller('mainController', function ($scope) {
$scope.name='this is first name'
});
你选错了路。永远不要访问控制器中的$元素。你需要把它包装成一个弹出指令,然后在你的HTML中加入弹出框。这违背了angular在控制器咒语中没有dom操作的原则。保持代码解耦,允许更容易的测试,并使所有dom操作代码保持声明性和模板中的状态。也就是说,有时候你需要元素。例如,浏览器自动完成字段填充输入,但不会触发ng_模型更新。在这种情况下,您必须对输入执行$(el).val()。这并不理想,但有时是不可避免的。就像你在处理CMS提供的内部内容一样。如果你必须处理Angular与现实世界的集成,那么访问controller中的元素是完全可以的。@hurshagrawal:我经常听到这个咒语,但没有一个咒语告诉我如何为谷歌地图编写控制器,并添加自定义控件而不操纵DOM。(让控制器委托给服务来完成并不重要。)angular google maps没有添加自定义控件的功能,可能正是出于这个原因。如果你或你的任何一个弟子能给我看,请在这里贴上密码。否则,我将继续假设您的咒语与其他任何教条一样适用于现实世界。问题是如何在dom中获取html。那个么,如何通过id从某个dom元素中获取html的控制器字符串呢?我已经否决了这个答案,因为它不是对所发布问题的答案。