Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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 如何在AngularJS控制器中获取当前范围dom元素?_Javascript_Jquery_Dom_Scope_Angularjs - Fatal编程技术网

Javascript 如何在AngularJS控制器中获取当前范围dom元素?

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()方法,从页面左上角为我提供左/顶值 那个么,如何获取当前

我有一份清单。在每个outerItem中,我都有一个innerItems列表。它们是动态排序的

当鼠标光标指向某个innerItem时,我必须在该innerItem元素的正上方显示弹出窗口

Popup div是body的子项,因为我不希望每个innerItem都有单独的弹出窗口

在我看来,在
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的控制器字符串呢?我已经否决了这个答案,因为它不是对所发布问题的答案。