You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Blur-Admin框架中实现控制器间数据传递的Service定义指引

在Blur-Admin的Dashboard模块中实现控制器间数据共享的Service方案

我刚好熟悉Blur-Admin的结构,针对你要在Dashboard模块的两个控制器间共享数据的需求,Service的定义其实非常清晰,完全可以贴合框架的模块化设计来做,具体步骤如下:

1. 确定Service的存放位置

因为你的需求是Dashboard模块内部的控制器/指令间共享数据,所以最佳实践是把Service定义在Dashboard模块内部,而不是全局的根模块里。这样既不会污染全局命名空间,也符合Blur-Admin按功能划分模块的设计思路。

你可以在Dashboard模块目录下新建一个文件,比如 dashboard.shared.service.js,位置建议和模块文件、控制器文件同级,或者单独建一个shared子目录来存放这类共享服务,让结构更规整。

2. 编写Service的具体实现

在新建的Service文件里,把它注册到BlurAdmin.pages.dashboard模块下(和你的Dashboard控制器、指令属于同一个模块),示例代码如下:

// dashboard/dashboard.shared.service.js
angular.module('BlurAdmin.pages.dashboard')
  .service('DashboardSharedService', function() {
    // 初始化共享数据容器
    let _sharedStore = {
      userStats: {},
      recentActivity: []
    };

    // 获取全部共享数据
    this.getSharedStore = function() {
      return _sharedStore;
    };

    // 更新共享数据(支持部分更新)
    this.updateSharedStore = function(newData) {
      angular.extend(_sharedStore, newData);
    };

    // 也可以针对特定业务场景封装单独的方法
    this.addRecentActivity = function(activity) {
      _sharedStore.recentActivity.unshift(activity);
      // 限制条数,避免数据过多
      if (_sharedStore.recentActivity.length > 10) {
        _sharedStore.recentActivity.pop();
      }
    };

    this.getRecentActivity = function() {
      return _sharedStore.recentActivity;
    };
  });

3. 在控制器中注入并使用Service

接下来,在需要共享数据的两个控制器里,注入刚才定义的DashboardSharedService,就可以实现数据互通了:

第一个控制器(比如负责更新数据的控制器)

angular.module('BlurAdmin.pages.dashboard')
  .controller('DashboardStatsCtrl', function($scope, DashboardSharedService) {
    // 模拟数据更新场景
    $scope.refreshStats = function() {
      let newStats = {
        userCount: Math.floor(Math.random() * 500),
        onlineUsers: Math.floor(Math.random() * 100)
      };
      // 更新共享数据
      DashboardSharedService.updateSharedStore({ userStats: newStats });
    };

    // 模拟添加活动记录
    $scope.addNewActivity = function() {
      DashboardSharedService.addRecentActivity({
        time: new Date().toLocaleString(),
        content: '用户完成了一次数据刷新'
      });
    };
  });

第二个控制器(比如负责展示数据的控制器)

angular.module('BlurAdmin.pages.dashboard')
  .controller('DashboardDisplayCtrl', function($scope, DashboardSharedService) {
    // 监听共享数据的变化,实时更新视图
    $scope.$watch(
      () => DashboardSharedService.getSharedStore(),
      (newStore) => {
        $scope.currentStats = newStore.userStats;
        $scope.activityList = newStore.recentActivity;
      },
      true // 开启深度监听,确保对象内部属性变化能被捕获
    );

    // 初始化时获取初始数据
    $scope.currentStats = DashboardSharedService.getSharedStore().userStats;
  });

4. 确保Service文件被正确加载

最后一步,要确保你的Service文件被加载到页面中。如果是手动引入,在index.html里找到Dashboard模块相关的script标签,在控制器文件之前引入Service文件:

<script src="app/pages/dashboard/dashboard.module.js"></script>
<script src="app/pages/dashboard/dashboard.shared.service.js"></script>
<script src="app/pages/dashboard/dashboard-stats.controller.js"></script>
<script src="app/pages/dashboard/dashboard-display.controller.js"></script>

如果用了构建工具(比如BlurAdmin自带的Gulp),只要把Service文件放在Dashboard目录下,构建脚本会自动把它打包到对应的模块文件里,不用手动处理。

额外说明

如果以后需要跨多个模块共享数据,才需要把Service注册到根模块BlurAdmin下,但针对你当前的Dashboard内部需求,放在模块内部是最合理的选择,既清晰又便于维护。

内容的提问来源于stack exchange,提问作者madu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:28:05