Mein Ziel ist es, eine Seite anzuzeigen, während Sie das Guthaben im Hintergrund berechnen und dieses Guthaben anzeigen. Ich dachte, ich würde versuchen, das Gleichgewicht in seine eigene Richtlinie zu isolieren. Also habe ich die folgende Anweisung erstellt:So weisen Sie einer Scope-Variablen einen Wert aus einer Controller-Funktion zu
app.directive('smBalanceInfo', function() {
return {
restrict: 'A',
//transclude: true,
//replace: true,
scope: {
title: '@',
calculateBalance: '&',
},
controller: ['$scope', function ($scope) {
$scope.balance = 0;
$scope.calculated = false;
var getBalance = function() {
$scope.balance = $scope.calculateBalance();
$scope.calculated = true;
};
getBalance();
}],
mit diesem sehr einfachen html:
{{title}}: <span ng-hide="calculated">Calculating...</span>
<span ng-show="calculated" ng-class="{'negative-amount': balance < 0}">{{balance| currency:""}}</span>
Und in meiner Form habe ich die folgende :
<div class="col-md-4" data-sm:balance-info title="@Labels.totalDueForAllInvoices" calculate-balance="getAccountBalance()"></div>
und die Steuerung Methode getAccountBalance des Formulars ist die folgende:
$scope.getAccountBalance = function() {
var totalBalance = 0;
if (!$scope.isNew) {
accountsService.getAccountBalance($scope.invoicesObject.accountNameHash).then(function (data) {
totalBalance = data.balance;
return totalBalance;
});
}
else { return totalBalance; }
};
Also, das ist alles gut, außer der Tatsache, dass meine Richtlinie variable Balance Undefiniert und nichts wird angezeigt, obwohl ich bei der Verfolgung den Wert totalBalance berechnet habe.
Was sollte ich ändern, um den Wert aus der Controller-Funktion zurück in die Direktive und global zu bekommen, das gewünschte Verhalten zu haben (z. B. Form angezeigt, während Balance noch berechnet wird)?