angularJS 中的 $broadcast 与 $stateProvider

$broadcast vs.$stateProvider in angularJS

我将大约 5 个 $http .get 和 .post 方法的响应从控制器传递到其他控制器。我正计划使用广播来传递这些响应。但是,似乎 state.go 可能是更好的路线。 (没有双关语意:)。我已经定义了一些状态,我是否应该简单地添加其他非 url 切换状态来传递这些参数? 谢谢

我会说你应该在 Angular 路由中使用 Resolves

//Example 
$routeProvider
    .when("/chat", {
        templateUrl: "msgView.html",
        controller: "msgController",
        resolve: {
            messages: function($http){
                //return your $http.get calls data
        }
    }
});

//use resolve like this in controller
app.controller("msgController", function (messages) {
    $scope.messages = messages;
});

您也可以将此状态设为抽象状态,或者在最顶层父状态或直接父状态中执行解析工作。

示例使用 ui-router

$stateProvider
  .state('chat', {
    url: '/chat',
    templateUrl: 'partials/chat.html',
    controller: 'msgController as vm',
    resolve: {
      messages: function($http){
                //return your $http.get calls data
        }
    }
  });

通过这样做,您将确保在初始化视图和控制器之前数据可用。如果你的数据是空的或部分的,那么你可以根据你想要的方式在你的控制器中处理它,比如显示 "No data available" 消息或其他东西。

这也确保如果您的解析出现任何错误,用户将被重定向到 404 页面或您在

中指定的任何其他页面
$state.defaultErrorHandler((error: any) => {
                $state.transitionTo("404");
            });