使用 TypeScript 在 AngularJS 中的指令之间共享来自异步调用的数据
Sharing data from asynchronous calls amongst directives in AngularJS with TypeScript
我可以找到如何解决这个问题的零碎方法,但没有具体的方法来使其工作。
我有一个对服务器的异步调用,以在 AngularJS 中获取数据,并希望将其存储在变量中。然后,应用程序中的所有指令都需要访问此变量,但显然它们都需要等待变量被分配才能使用它。我还使用 TypeScript 及其export
功能从它们自己的函数中旋转指令。
控制器
export class MainController{
fundData: Object;
constructor(scope, FundService) {
FundService.fetchData('some_param').then(d => {
let data = d[0],
fundProps = data.properties_pub;
this.fundData = {
'isin': data.clientCode,
'nav': fundProps.nav.value,
'nav_change': fundProps.nav_change.value.toFixed(2),
'nav_change_direction': change,
'total_aum': fundProps.net_asset.value.toFixed(2)
};
scope.ctrl = this;
});
}
}
命令
class OverviewController {
scope: ng.IScope;
constructor(scope){
scope.$watch('data', newVal => {
console.log(newVal);
});
}
}
OverviewController.$inject = ['$scope'];
export function overview(): ng.IDirective {
return {
restrict : "C",
controller : OverviewController,
controllerAs : "overview",
template : require("../templates/overview"),
bindToController :{
data: '='
}
}
}
.HTML
<div ng-controller="MainController">
<div class="overview" data="ctrl.fundData"></div>
</div>
引导过程
let module = angular.module(MODULE_NAME,[])
.controller('MainController', ['$scope','FundService', MainController])
.service('FundService', FundService)
.directive('overview', overview);
我尝试过的事情:
$rootScope
我可以设置一些静态的东西并共享它,所以这有效:
$rootScope.data = 2;
这不会:
someFunction().then(data => { $rootScope.data = data });
也许$rootScope中
有一些我不明白的承诺。控制器中的设置
我可以将调用的结果设置为控制器中的变量,将其设置为指令中的属性,然后将该属性绑定到其控制器,但这也不起作用,即使我在变量上使用$watch
也是如此。
我要做的是获取数据,将其存储在服务中(我认为您已经在这样做),然后在服务中的数据更新时广播一个事件。这是一个示例(在原始javascript中)
module.service('DataService', function(rootScope) {
...
var data;
services.setData = function(newData) {
data = newData;
rootScope.$broadcast('DataUpdated');
};
...
});
然后在你的指令中,你需要做的就是监听'DataUpdated'
事件:
scope.$on('DataUpdated', ...);
希望对您有所帮助!
相关文章:
- 在我的案例中,如何获取异步数据
- 使用从内部函数返回的异步数据对外部函数返回promise
- 异步数据加载后提交HTML表单的正确方法是什么
- jQuery Mobile Multi-Select from 异步数据
- AngularJS在控制器之间共享异步数据
- 反应.js - 处于异步数据状态的深层对象不起作用
- HighCharts导航器,用于在异步数据加载后保持范围.(懒惰加载)
- Angular2 模板尝试在异步数据存在之前访问它
- 根据异步数据计算的可观察量
- 节点.js使用异步数据进行响应
- 更改角度方向的异步数据
- 全局变量和异步数据
- angularjs中的异步数据检索
- JavaScript/jQueryAJAX-将异步数据返回到同步程序中
- Ember-嵌套视图中的异步数据
- Angular JS ng用异步数据重复
- 异步数据检索和缓存
- Angular,在得到异步数据之前停止渲染
- 在Vue中使用服务器端渲染时,异步数据更改
- highcharts中的异步数据输入