每次显示视图时,在控制器上调用功能

时间:2014-06-18 09:33:26

标签: javascript angularjs

我正在努力解决以下(简单?)情况......

我有一个单页应用程序,我正在使用AngularJS在其中创建一个新的模块/功能集。但是,由于我无法控制的事件,它将使用jquery移动路由。

我遇到的问题是,每次显示视图时,一个特定视图需要从IndexedDb中提取数据,因为有一个后台数据轮询机制可以在indexeddb中添加/删除对象。 Angular是否有类似于" pageshow"我可以用来触发indexeddb查找的事件?我想过制作手表,但我担心这会耗费大量资源。

2 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但jquery移动路由只保留DOM并更改不同pages的显示状态吗?

如果是这种情况并且控制器没有刷新,则观察者将是您的解决方案,并且一个简单的$ watch将不会对您的应用程序性能产生影响,尽管如果所述更改来自其他视图则您更好控制器之间的双向数据绑定

答案 1 :(得分:0)

有一些方法可以做到这一点

1-如果该视图具有自己的控制器,那么最好的方法是在配置中定义 resolve 属性

     app.config(function($routeProvider){
       $routeProvider.when('/YourView',{
        temlateUrl:"YourTemplate.html"
        controller:'YouteTemplateControler'
        resolve:{
         init:function(){
           alert("Hello from RESOLVE");
           // here you can call an $http request and return the data like this : 
           // return dataFromHTTPREQUESTCallBack;
                      }
           }
          // this function will fire before anything in your controller tries to fire
       })})

稍后在您的控制器中,您可以像这样使用它

 youApp.controller('YourController',function($scope,init){
     $scope.data = init.data 

  });

2-您可以在控制器的第一行调用函数,如下所示:

   yourApp.controller('yourController',function(){
   init();
   function init(){
   alert("Hello from controller");
   // Keep in mind that if you have some dependency on this function that You will use in your controller , this is not a aschynchronous function , So its better to use **resolve** as I said in my first example
    }
 });