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");
});
我将大约 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");
});