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