Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么赢了';这不是一个事件中的资源火灾吗?_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 为什么赢了';这不是一个事件中的资源火灾吗?

Javascript 为什么赢了';这不是一个事件中的资源火灾吗?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个包含资源的对象。当我使用此资源在应用程序的大多数部分发出请求时,它工作正常。但是,在由于指令中的事件(jQuery draggable和dropable,元素被删除时触发事件)而被调用的函数内部,资源不会触发请求。为什么会这样?是否有解决方法或修复方法 例如: //function called by directive Project.appendTemplate = function(project, tID) { console.log('appendTemplat

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

例如:

  //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
  });

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

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


更多信息。

您是否会创建一个plunker或JSFIDLE来复制此问题?我无法使用。
范围来复制您的问题。如果您需要从框架外部更新角度内的模型,则使用$apply()
。触发
$http
请求这样的事情是不必要的。@rtcherry我想我是在做一点假设,他不只是想用回调的
结果
记录一些事情。他可能已经用日志替换了那里的代码,以缩短他的帖子。假设他以某种方式修改模型,而不是记录“hello”,那么将需要
$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
        });
    });
}