【发布时间】:2016-06-24 21:49:29
【问题描述】:
我可以找到解决这个问题的一些方法,但没有具体的方法让它起作用。
我有一个异步调用服务器以在 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 中的承诺。
在控制器中设置
我可以将调用结果设置为控制器中的变量,将其设置为指令中的属性,然后将属性绑定到其控制器,但这也不起作用,即使我使用@987654328 @ 变量。
【问题讨论】:
标签: javascript angularjs asynchronous typescript angular-promise