【问题标题】:Unable to call angular function without setTimeout没有 setTimeout 无法调用角度函数
【发布时间】:2016-11-28 07:36:56
【问题描述】:

我正在尝试维护 Back 功能。在我们的应用程序中,我们决定放置一个后退按钮,通过单击后退按钮,我必须维护用户选择或填写的表单的所有值。我正在使用 angularjs 在 MVC 中执行此操作。

在表单中,我们允许用户为所选手机型号选择颜色。因此,表单就像用户会提示选择电话型号,然后选择颜色,最后选择容量。因此,它是一个依赖字段,只有在选择立即字段时才会启用。

颜色是动态创建的。

在下面的代码中,我在下面分享的是颜色。选择颜色后,我也启用了所需的容量。

var elementName = modelName + '_Black';
var elementNameWithHash = '#' + elementName;
angular.element(elementNameWithHash).trigger("click", elementName);

modelName 将动态传递给它。

这里的问题是,代码没有执行触发对颜色部分的点击,所以它可以显示为突出显示并且启用了下面的容量部分。

但是,除非我用这样的 setTimeout 方法装饰它,否则这段代码不会执行:

setTimeout(function () { angular.element(elementNameWithHash).trigger("click", elementName) }, 1);

我无法理解为什么它会向我展示这种奇怪的行为。

任何关于此的说明,将不胜感激。

而且,如果我必须在没有 setTimeout 的情况下调用它,我该怎么办?

【问题讨论】:

  • 这听起来可能是某种竞争条件,例如如果您直接拨打电话,则哈希元素尚不可用,但等待一段时间允许电话继续进行。您可能希望包含完整的代码,以便我们查看。
  • @TimBiegeleisen 请检查并让我知道是否需要其他内容。
  • 为什么要触发对元素的点击?如果要触发点击时调用的函数,直接调用函数即可。
  • 可能您的元素尚未加载。因此,使用 setTimeout,它提供了一个额外的摘要循环,其中文档被加载并且元素现在可用,因此它与 setTimeout 一起使用。您可能需要考虑这种方法。 stackoverflow.com/questions/18646756/…
  • "modelName" 值由 promise 返回?

标签: javascript angularjs settimeout


【解决方案1】:

看起来您的代码在页面加载之前被调用。

Angular 有自己的函数来测试准备好的文档:

angular.element(document).ready(function () {
    // Your code
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多