gpt4 book ai didi

angularjs - 如何知道 Controller 何时完成以 Angular 加载?

转载 作者:行者123 更新时间:2023-12-04 17:09:46 29 4
gpt4 key购买 nike

我有一个案例,其中 app.run向所有 Controller 发送广播消息,但在其中一些 Controller 实际加载之前。因此他们不会捕获事件。

下面是一个例子:

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

和 Controller :
app.controller('GroupsCtrl', function($rootScope,$scope){
$scope.$on('notifyCtrlOnDeviceReady', function(event, device){
alert('notifyCtrlOnDeviceReady - done');
});
});
  • 我想在服务中创建一些标志,但这似乎是一种解决方法。
  • 我还想创建一个 $watch监听服务标志并在所有 Controller 完成初始化时发送广播。

  • 是否有更优雅的方式在加载时通​​知 Controller ?

    谢谢,

    最佳答案

    在我看来,您在这里有两个选择。我不建议在这种情况下使用 $broadcast 事件系统,因为您的 Controller 可能/可能未加载的问题。

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

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

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

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

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

    });

    2) 如果您的平台允许注册多个就绪函数,只需将其添加到每个 Controller ,如果设备就绪,该 Controller 应立即运行。
    app.controller('GroupsCtrl', function($rootScope, $scope){

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

    });

    如果可能的话,我个人会选择 #2,因为它使 $rootScope 更干净,但无论哪种方式都应该可以。您甚至可以尝试将您的 ionic.Platform 放在一个服务中并注册它,这样如果 API 发生变化, Controller 将不必在以后修改。
    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.
    });

    });

    关于angularjs - 如何知道 Controller 何时完成以 Angular 加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410934/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com