1

div 要素に入れている角度ディレクティブがあります。私のリンクの1つで:私が呼び出す関数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();
                    };
                }
        });

プロジェクトのほとんどの plunkr は次のとおりです: http://plnkr.co/edit/SiBDuylEv1LUCuWCv5Ep?p=preview

エラーを再現するには: ユーザー行の 1 つをクリックすると、アラート (elem) が表示されます。コンソールを見ると、フォーカス エラーが表示されます。

4

2 に答える 2

2

AngularJS の前に jQuery をロードすると、Angular は jqLit​​e (AngularJS に含まれる) の代わりに jQuery を使用します。それelem.focus(); 以外の場合は、stevuuが述べたように、使用する必要があります$(elem).focus();

于 2013-10-19T21:57:02.580 に答える
0

リンク関数は、要素がレンダリングされる前に呼び出されるため、通常 focus() は機能しません。これは、プレリンク機能とポストリンク機能のために、ディレクティブの「リンク」属性が「プレ」と「ポスト」に分割されている例です。

実施例: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 に答える