Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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(1.4.0-5 beta)超时只工作一次_Javascript_Html_Angularjs_Angularjs Directive_Timeout - Fatal编程技术网

Javascript 指令中的Angularjs(1.4.0-5 beta)超时只工作一次

Javascript 指令中的Angularjs(1.4.0-5 beta)超时只工作一次,javascript,html,angularjs,angularjs-directive,timeout,Javascript,Html,Angularjs,Angularjs Directive,Timeout,问题: 我有一个在HTML文档中设置输入焦点的指令。但是,文本字段通过特定事件(例如按下按钮)隐藏和激活。要处理渲染时间,需要一个超时,该超时只能工作一次 请参阅,以获取最简单的示例 请注意,这里有一个调试打印,第一次显示大约需要3秒钟,而接下来的时间会立即显示。这表明超时实际上只工作一次。我如何解决这个问题,任何帮助将不胜感激 代码: HTML(省略HTML标记和正文) 更多详细信息 我目前的AngularJS版本是1.4.0.beta-5,但同样的问题仍然存在于1.4.0.beta-6。然而

问题:

我有一个在HTML文档中设置输入焦点的指令。但是,文本字段通过特定事件(例如按下按钮)隐藏和激活。要处理渲染时间,需要一个超时,该超时只能工作一次

请参阅,以获取最简单的示例

请注意,这里有一个调试打印,第一次显示大约需要3秒钟,而接下来的时间会立即显示。这表明超时实际上只工作一次。我如何解决这个问题,任何帮助将不胜感激

代码:

HTML(省略HTML标记和正文)

更多详细信息

我目前的AngularJS版本是1.4.0.beta-5,但同样的问题仍然存在于1.4.0.beta-6。然而,在Angular 1.2.1中,似乎没有问题

另外,当不隐藏输入时,一切都像一个符咒一样工作,指令会被调用,但超时不会


即使在Fiddle上,焦点在第一次甚至都不起作用,但它总是在点击“run”后起作用。

如果我正确理解了您的问题,我不能100%确定,但这会在单击后聚焦输入

    var myApp = angular.module("CheckAllModule", []);

    myApp.directive('myFocus', function ($compile, $timeout) {
        return {
            restrict: 'A',
            link: function (scope, element, attr) {          
                var focus = function (n,o) {
                    $timeout(function() {
                        if (n != 0 && n) {
                            console.log(element[0]); // Degub print
                            element[0].focus();
                            element[0].select();
                        }
                    }, 3000);
                }

                scope.$watch(attr.myFocus, focus);

                element.removeAttr("my-focus");
                $compile(element)(scope);
            }
        };
    });

希望有帮助

哦,我的上帝,非常感谢你。我一整天都在为这事伤脑筋。那么我不应该把焦点放在手表里面?你能解释一下原因吗?(对不起,我是新手)当然
focus()
每次由于Angular的双向绑定而更改attr.myFocus时都会被调用。因此,单击该按钮后,
attr.myFocus
会发生变化,并触发
focus()。现在,在任何事情发生之前,它等待3000毫秒,然后处理函数()中的所有内容{if(!=0&&…所以真正重要的部分是角度双向绑定逻辑。此外,请查看上的文档。这可能也会有所帮助。啊啊啊,我将超时设置在$watch上,这就是为什么它只在“构造”期间被调用,而不是每次值更改时(即$watch被调用)。非常感谢!
var myApp = angular.module("CheckAllModule", []);

myApp.directive('myFocus', function ($compile, $timeout) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            var timer = $timeout(function () {
                scope.$watch(attr.myFocus, function (n, o) {
                    if (n != 0 && n) {
                        console.log(element[0]); // Degub print
                        element[0].focus();
                        element[0].select();
                    }
                });
            }, 3000);
            element.removeAttr("my-focus");
            $compile(element)(scope);
        }
    };
});
    var myApp = angular.module("CheckAllModule", []);

    myApp.directive('myFocus', function ($compile, $timeout) {
        return {
            restrict: 'A',
            link: function (scope, element, attr) {          
                var focus = function (n,o) {
                    $timeout(function() {
                        if (n != 0 && n) {
                            console.log(element[0]); // Degub print
                            element[0].focus();
                            element[0].select();
                        }
                    }, 3000);
                }

                scope.$watch(attr.myFocus, focus);

                element.removeAttr("my-focus");
                $compile(element)(scope);
            }
        };
    });