加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何知道控制器何时完成加载角度?

发布时间:2020-12-17 06:52:49 所属栏目:安全 来源:网络整理
导读:我有一个案例,app.run向所有控制器发送广播消息,但在其中一些实际加载之前.因此他们没有抓住事件. 这是一个例子: app.run(function($rootScope){ // I get this event too fast and GroupsCtrl still not ready ionic.Platform.ready(function(){ // notify
我有一个案例,app.run向所有控制器发送广播消息,但在其中一些实际加载之前.因此他们没有抓住事件.

这是一个例子:

app.run(function($rootScope){    

    // I get this event too fast and GroupsCtrl still not ready
    ionic.Platform.ready(function(){
        // notify controllers on device ready    
        $rootScope.$broadcast('notifyCtrlOnDeviceReady',device);            
     });
});

和控制器:

app.controller('GroupsCtrl',function($rootScope,$scope){
   $scope.$on('notifyCtrlOnDeviceReady',function(event,device){
           alert('notifyCtrlOnDeviceReady - done');
       });
});

>我想在服务中创建一些标志,但它似乎是一种解决方法.
>我还想创建一个监听服务标志的$watch,并在所有控制器完成初始化后发送广播.

是否有更优雅的方式在加载时通??知控制器?

谢谢,

解决方法

在我看来,你有两个选择.由于您可能/可能未加载控制器的问题,我不建议在此实例中使用$broadcast事件系统.

1)
您可以在rootscope上放置一个promise并在控制器中附加then语句:

app.run(function($rootScope,$q){    
    var dfd = $q.defer();
    $rootScope.deviceReady = dfd.promise;

    ionic.Platform.ready(function(){  
        dfd.resolve( device );            
     });
});

app.controller('GroupsCtrl',$scope){

   $rootScope.deviceReady.then(function( device ){
     //do something with device
   })

});

2)如果您的平台允许注册多个就绪功能,只需将其添加到每个控制器,如果设备准备就应立即运行.

app.controller('GroupsCtrl',$scope){

     ionic.Platform.ready(function(){  
        //do something with device here.            
     });

});

我个人会尽可能使用#2,因为它保持$rootScope清洁,但无论哪种方式都应该做得很好.您甚至可以尝试将ionic.Platform准备好服务并注册,因此如果API发生变化,控制器将不会在以后的路上进行修改.

app.factory("ionicPlatform"),function( $q ){
  var ready = $q.defered();

  ionic.Platform.ready(function( device ){
   ready.resolve( device );
  });

  return {
   ready: ready.promise
  }
});

app.controller('GroupsCtrl',function($scope,ionicPlatform){

     ionicPlatform.ready.then(function(device){  
        //do something with device here.            
     });

});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读