【问题标题】:Directive not working anymore passing to Angular 1.3传递给 Angular 1.3 的指令不再起作用
【发布时间】:2026-01-31 09:45:02
【问题描述】:

昨天,我已将 Angular Js 更新到最新版本 1.3,但一个简单的指令将焦点放在输入文本上不再起作用。这里是coffeescript中的代码:

# activate the focus to an element
angular.module('dbManagerApp').directive 'riumFocusOn', ->

    scope:
        trigger: '=riumFocusOn'
    link: (scope, elem, attr) ->

        scope.$watch 'trigger', (value) ->

            elem[0].focus() if value

调试代码,它像以前一样通过focus()方法,但是在网页中没有出现光标。 谁能帮我理解它为什么停止工作?查看 Angular 的变更日志,我没有看到任何可以包含我的问题的点。

更新

这里是Plunker的例子

我希望在按下“添加项目”链接后,焦点转到将出现在下面的输入文本。我尝试将 Angular 更改为 1.2,但仍然无法在 Plunker 中工作,但在我的项目中工作..

【问题讨论】:

  • 显示您的 HTML,以及您如何使用该指令。也许你可以做一个有问题的演示?
  • 我认为您的问题与其他问题有关,我试图重现此问题,但它对我有用 plnkr.co/edit/m6N1rKPrk50f3sZcfGrM?p=preview
  • 我已经添加了示例,可能问题不是新版本的 Angular 而是其他问题...

标签: javascript angularjs coffeescript


【解决方案1】:

我真的不知道你在“触发器”上使用 $watch 正在观看什么,但如果它只是在显示元素时自动对焦,你可以随时使用“自动对焦”,如果它不会在工作

<input autofocus id="edit--menu__input" rium-escape-input="" ... />

【讨论】:

  • 请考虑我的页面和其他输入文本上有多个带有“添加项目”(如 plunker 上的示例)的列表。页面很复杂。我尝试添加自动对焦但仍然无法正常工作...谢谢
  • 您是否尝试将其与 ng-if 而不是 ng-show 结合使用?
【解决方案2】:

我以这种方式修复了指令:

app.directive('riumFocusOn', function() {
    return {
      link: function(scope, elem, attrs) {

        var model = attrs.riumFocusOn;

        scope.$watch(model, function(value) {
          if (value === true) {
              setTimeout(function() {
                 elem[0].focus();
              }, 200);

          }
        });
      }
    };
  });

现在它可以像以前一样正常更新到 Angular 1.3

【讨论】:

    最近更新 更多