1

我有一个包含资源的对象。当我使用此资源在应用程序的大部分部分发出请求时,它工作正常。但是,在由于指令中的事件而被调用的函数内部(jQuery 可拖动和可放置,当元素被放置时触发事件),资源不会触发请求。为什么是这样?有解决方法或修复方法吗?

例子:

  //function called by directive
  Project.appendTemplate = function(project, tID) {
    console.log('appendTemplate Called'); //this happens
    Template.resource.get({'ID' : 1}, function(result) {
      console.log('hello'); //this does not
    });
  }

  //called when this service is loaded
  Template.resource.get({'ID' : 1}, function(result) {
    console.log('hello'); //happens
  });
4

1 回答 1

0

您需要将事件处理程序代码包装在对scope.$apply()$scope.$apply(取决于您是在指令的链接还是控制器方法中)的调用中,如下所示:

Project.appendTemplate = function(project, tID) {
    scope.$apply(function(){
        console.log('appendTemplate Called'); //this happens
        Template.resource.get({'ID' : 1}, function(result) {
            console.log('hello'); //this does not
        });
    });
}

每当在事件回调中从 Angular 框架外部发生此类更改时,都会$apply()告知 Angular 该更改。

有关更多信息,请参阅此答案

于 2013-06-11T00:49:06.087 回答