仅在角度加载时第一次运行函数

时间:2016-05-27 12:00:49

标签: angularjs

我使用了角度种子模板(角度1),我有routeProvider设置等等,现在我想执行一个函数(它驻留在工厂中),但只是第一次页面加载时我找到了很多解决方案,但是每次用户在标签之间切换时我都不想执行代码(当然,通过routeProvider,页面没有重新加载) - 代码必须是仅在整个页面被重新加载时执行。

我该如何处理?我尝试从run调用函数,然后在页面加载时广播事件,但是没有事件监听器 - 我想这是因为run部分在设置控制器之前执行,所以当事件被广播时,没有附加的听众。

那么,有什么建议可以解决这个问题吗?

更新

用例:

  • 当用户在页面中键入网址时,页面会被加载
  • 加载页面时,会执行$http.get请求,该请求会获得随机内容
  • 只有点击按钮才能更改此内容,以明确请求更改内容。
  • 如果用户点击其他页面,例如view2(routeProvider)然后返回view1,内容不得更改
  • 当用户刷新页面(F5)时,内容会再次更改(或者已经说明,只需点击一下按钮)

1 个答案:

答案 0 :(得分:3)

使用run方法:

app.run(function(yourService){
  yourService.cacheRandomContent();
});

在应用程序启动并创建服务后,它只运行一次。

要访问控制器中的数据,只需注入相同的服务:

app.controller('someCtrl',function($scope, yourService){
  yourService.getCachedRandomContent().then(function(resp){
    $scope.data = resp.data;
  });
});

您的服务将是:

app.service('yourService',function($http){
  var promise;
  return {
   cacheRandomContent: function(){
     promise = $http.get();
   },
   getCachedRandomContent : function(){
       return promise;
   }
  }
});