【问题标题】:In AngularJS is it possible to force a view to update from outside of it's controller?在 AngularJS 中是否可以强制视图从其控制器外部进行更新?
【发布时间】:2013-01-18 07:00:20
【问题描述】:

编辑:

标题中所述的问题在下面得到了正确的回答,所以我认为为了让人们了解如何做到这一点,我应该将问题留在下面的答案中。

事实证明,我使用的框架并没有完全抽象出 Angular 的变量到驼峰式的约定。它在其他任何地方都被抽象掉了,只是不是在这里,现在一切正常,所以我根本不需要强制重绘。如果有人这样做,请参阅下面的答案。 :)

【问题讨论】:

  • 如果你有双向绑定,你想重绘什么?我们能否得到一个更完整的例子,也许是关于 Plunker 的?另外,never 引用控制器中的 DOM - 这很糟糕。
  • @JoshDavidMiller 不,不幸的是,我无法在任何地方重现整个框架。我要说的是“=”应该绑定数据,但事实并非如此。我可以随意更改传入的变量,视图永远不会重绘自身。
  • 我当然不想要“整个框架”,而只是一个最小的例子,因为我时间有限。我不知道您所说的“从不重绘自己”是什么意思。如果您的意思是该值未更新,那么您的代码中有问题。但是我们不能在没有看到一些代码的情况下告诉你什么。
  • 这正是我想要确定的,@JoshDavidMiller,如果我使用的辅助代码有问题。简单的案例可以正常工作,但在我们使用的框架中它不起作用。真的,我只是想弄清楚是否可以强制视图从其控制器外部刷新...?
  • @NathanCTresch 太棒了。很高兴你解决了这个问题!

标签: javascript model-view-controller angularjs


【解决方案1】:

在指令中而不是在控制器中进行事件绑定。如果您对某些模型进行更改并希望这些更改反映在指令之外,则必须从指令内部调用 $apply()

myApp.directive('someDir', function () {
    return {
        restrict: 'E',
        scope: {
            model: '=',
        },
        link: function (scope, elt, dirs) {
            elt.bind('click', function () {
                scope.$apply(function () {
                    // make changes to scope.model
                });
            });
        }
    }
});

【讨论】:

  • 好的,这是一个不好的问题,我会接受你的回答,主要是因为它回答了我提出的问题。事实证明,我遇到的问题是我正在使用的框架从 Angular 中部分抽象出来,而且我不知道在这种情况下变量插值机制并没有从我身上抽象出来.我所要做的就是使用这个约定,并在我的指令内的 camelCase 中正确获取数据。
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多