1

我有一个角度指令,我将其放入 div 元素中。在我的一个链接中:我调用的函数element.focus()。我收到控制台错误:Object [object Object] has no method focus.

我在前一行调用 alert(element ,它说 element is [[object HTMLDivElement]].

在调用焦点之前,我是否需要以某种方式将元素转换为 div?

这是一个指令,

tsUui.directive('userList', function(){
    return{
        restrict: 'A',
                link: function (scope, elem, attrs){
                    scope.something=function() {
                       elem.focus();
                    };
                }
        });

这是该项目的大部分内容:http ://plnkr.co/edit/SiBDuylEv1LUCuWCv5Ep?p=preview

重现错误:单击其中一个用户行,您将收到警报(elem)。如果您观看控制台,您会看到焦点错误。

4

2 回答 2

2

如果你在 AngularJS 之前加载 jQuery,Angular 使用 jQuery 代替 jqLit​​e(包含在 AngularJS 中)。然后你可以使用elem.focus(); 否则,正如 stevuu 提到的,你必须使用$(elem).focus();

于 2013-10-19T21:57:02.580 回答
0

在渲染元素之前调用链接函数,因此 focus() 通常不起作用。这是一个示例,其中指令上的“link”属性被拆分为“pre”和“post”,用于 pre-link 和 post-link 功能。

工作示例:http://plnkr.co/edit/Fj59GB

// this is the directive you add to any element you want to highlight after creation
Guest.directive('autoFocus', function() {
    return {
        link: {
            pre: function preLink(scope, element, attr) {
                console.debug('prelink called');
                // this fails since the element hasn't rendered
                //element[0].focus();
            },
            post: function postLink(scope, element, attr) {
                console.debug('postlink called');
                // this succeeds since the element has been rendered
                element[0].focus();
            }
        }
    }
});
<input value="hello" />
<!-- this input automatically gets focus on creation -->
<input value="world" auto-focus />

完整的 AngularJS 指令文档:https://docs.angularjs.org/api/ng/service/$compile

于 2014-05-28T19:16:01.140 回答