在 controllers/directives 之间传递数据
Passing data between controllers/directives
我知道这个问题已经得到解答,使用服务是可行的方法,但我不知道如何实施它。非常感谢一些指导。
我正在尝试在 Blur-Admin 框架中实现这一目标。
结构如下:
最上面有dashboard.module.js:
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard', [])
.config(routeConfig);
/** @ngInject */
function routeConfig($stateProvider) {
$stateProvider
.state('dashboard', {
url: '/dashboard',
templateUrl: 'app/pages/dashboard/dashboard.html',
title: 'Dashboard',
sidebarMeta: {
icon: 'ion-android-home',
order: 0,
},
});
}
})();
然后用元素定义dashboard.html。
<div class="row">
<dashboard-line-chart></dashboard-line-chart>
</div>
<div class="row">
<dashboard-todo></dashboard-todo>
</div>
...
...
之后,这些元素中的每一个都是使用指令编写的:
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard')
.directive('dashboardLineChart', dashboardLineChart);
/** @ngInject */
function dashboardLineChart() {
return {
restrict: 'E',
controller: 'DashboardLineChartCtrl',
templateUrl: 'app/pages/dashboard/dashboardLineChart/dashboardLineChart.html'
};
}
})();
然后对应的Controller为:
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard')
.controller('DashboardLineChartCtrl', DashboardLineChartCtrl);
/** @ngInject */
function DashboardLineChartCtrl(baConfig, layoutPaths, baUtil) {...}
我想做的是在两个这样的控制器之间共享数据。
例如:
function DashboardLineChartCtrl(baConfig, layoutPaths, baUtil, sharedData) {...}
和
function DashboardDataReceiver(baConfig, layoutPaths, baUtil, sharedData) {...}
如果要使用服务,我应该在哪里定义服务?
非常感谢任何帮助。
谢谢。
例如,您可以定义一个带有 getter 和 setter 的新服务工厂,如下所示:
app.factory('sharedData', function () {
var x = "";
return {
'getX': function () { return x; },
'setX': function (newVal) { x = newVal; }
}
});
接下来,您必须按照编写的方式将服务注入到控制器中。
最后,您可以通过控制器中的服务设置和获取数据,例如:
sharedData.setX("some string"); // to set the x var into service with "some string"
sharedDate.getX(); // to get the x var content (in this case, "some string")
引用 Angular Js 文档:
AngularJS services are:
Lazily instantiated – AngularJS only instantiates a service when an
application component depends on it.
Singletons – Each component
dependent on a service gets a reference to the single instance
generated by the service factory.
这意味着您可以定义变量并将它们的值更新到工厂实例中,并从您注入它的每个控制器访问它。
我知道这个问题已经得到解答,使用服务是可行的方法,但我不知道如何实施它。非常感谢一些指导。
我正在尝试在 Blur-Admin 框架中实现这一目标。
结构如下:
最上面有dashboard.module.js:
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard', [])
.config(routeConfig);
/** @ngInject */
function routeConfig($stateProvider) {
$stateProvider
.state('dashboard', {
url: '/dashboard',
templateUrl: 'app/pages/dashboard/dashboard.html',
title: 'Dashboard',
sidebarMeta: {
icon: 'ion-android-home',
order: 0,
},
});
}
})();
然后用元素定义dashboard.html。
<div class="row">
<dashboard-line-chart></dashboard-line-chart>
</div>
<div class="row">
<dashboard-todo></dashboard-todo>
</div>
...
...
之后,这些元素中的每一个都是使用指令编写的:
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard')
.directive('dashboardLineChart', dashboardLineChart);
/** @ngInject */
function dashboardLineChart() {
return {
restrict: 'E',
controller: 'DashboardLineChartCtrl',
templateUrl: 'app/pages/dashboard/dashboardLineChart/dashboardLineChart.html'
};
}
})();
然后对应的Controller为:
(function () {
'use strict';
angular.module('BlurAdmin.pages.dashboard')
.controller('DashboardLineChartCtrl', DashboardLineChartCtrl);
/** @ngInject */
function DashboardLineChartCtrl(baConfig, layoutPaths, baUtil) {...}
我想做的是在两个这样的控制器之间共享数据。 例如:
function DashboardLineChartCtrl(baConfig, layoutPaths, baUtil, sharedData) {...}
和
function DashboardDataReceiver(baConfig, layoutPaths, baUtil, sharedData) {...}
如果要使用服务,我应该在哪里定义服务?
非常感谢任何帮助。
谢谢。
例如,您可以定义一个带有 getter 和 setter 的新服务工厂,如下所示:
app.factory('sharedData', function () {
var x = "";
return {
'getX': function () { return x; },
'setX': function (newVal) { x = newVal; }
}
});
接下来,您必须按照编写的方式将服务注入到控制器中。 最后,您可以通过控制器中的服务设置和获取数据,例如:
sharedData.setX("some string"); // to set the x var into service with "some string"
sharedDate.getX(); // to get the x var content (in this case, "some string")
引用 Angular Js 文档:
AngularJS services are:
Lazily instantiated – AngularJS only instantiates a service when an application component depends on it.
Singletons – Each component dependent on a service gets a reference to the single instance generated by the service factory.
这意味着您可以定义变量并将它们的值更新到工厂实例中,并从您注入它的每个控制器访问它。