AngularJS在app load上运行一段代码

时间:2018-03-22 20:40:23

标签: javascript angularjs angular-ui-router

地基:

  • 我有一些AngularJS应用程序,它们在很大程度上充当单个应用程序。
  • 所有应用都使用AngularUIRouter
  • 我有一个角度服务,它将在屏幕上显示我们在整个代码库中使用的弹出警报。 alertService.danger("You broke it!")
  • 如果您没有在顶级angularjs应用程序之间跳转导致硬刷新,那么这些内容非常棒并且可以通过页面更改保持最新状态。
  • 但是,如果您拨打电话显示提醒,然后立即重定向到另一个应用,警报就会丢失。

所以...我想,在APP LOAD(刷新)上,检测是否有URL参数“?alertMessage =你打破了它& alertType = Danger”,如果有,请调用我的服务根据什么是显示警告通过。

我想知道实现这一目标的最佳方法是什么。我创建了这样一个工厂:

#alertOnLoad.js
var AlertOnLoad = angular.module('myApp.alertOnLoad.service', []);

AlertOnLoad.factory('alertOnLoad', function($location, alertService) {
  var queryParams = $location.search();
  var alertText = queryParams.alertText;
  var alertType = queryParams.alertType;

  alertService[alertType](alertText, {timeout: 3000});
  return {};
});

module.exports = AlertOnLoad.name;

然后在我的App.js中我注入了该服务。所以它在页面加载时运行。

#app.js
angular.module('myApp.onOfMyApps', [
  viewsModule,
  scaffoldingModule
])

.config(function($locationProvider, $urlRouterProvider) {
  $locationProvider.html5Mode({
    enabled: true
  });

  $urlRouterProvider.otherwise('/asset-list/');
})
.run(function($rootScope, alertOnLoad){ // Service Injected here

});

这完全有效,但出于以下几个原因感觉不对:

  • 对于一个它作为工厂设置,但我没有返回对象中的任何方法。这看起来很奇怪。
  • 将依赖项注入app.run()块只是为了让它们开始设置似乎很奇怪。

我很好奇是否有人对如何更好地利用Angular实现这一点有任何其他想法。

干杯!

0 个答案:

没有答案