私はAngularを初めて使用しています。私はコンポーネント(1.6)を使用しようとしています。親では、$http.get
がサービスからデータを取得し、応答を$scope
変数に割り当てます。そのスコープ変数は、一方向バインディング<
を使用して子コンポーネントに渡されます。 JavaScriptでは、渡された変数に警告すると「未定義」になりますが、子のHTMLテンプレートに変数が表示されます。競合状態が起こっているように、サービスからのデータがロードされるまで待つように指示する方法はわかりません。私の子コンポーネントで
<thermometer baseline="baseline"></thermometer>
:私の親HTMLテンプレートで
(function (angular) {
'use strict';
$http.get("http://localhost:52422/api/PayOffYourCc")
.then(function mySucces(response) {
$scope.baseline = response.data;
}
,
function myError(respone) {
$scope.baseline = response.statusText;
}
);
})(window.angular);
:私の子供のHTMLテンプレートで
(function (angular) {
'use strict';
function drawChart(baselineVal) {
alert(baselineVal);
}
function ThermometerController($scope) {
var ctrl = this;
ctrl.$onInit = function() {
drawChart(ctrl.baseline);
};
}
angular.module('payOffYourCcApp').component('thermometer', {
templateUrl: '../PayOffYourCC/partials/thermometer.html',
transclude: true,
controller: ThermometerController,
bindings: {
baseline: '<'
}
});
})(window.angular);
:
私parent.jsで
<div>
baseline:{{$ctrl.baseline}}
</div>
htmlでは{{$ctrl.baseline}}
が表示されますが、.jsで警告するとundefined
となります。何故ですか?どうすれば{{$ctrl.baseline}}
がjavascriptがロードされる前に有効範囲に入っていることを確認できますか?角度成分で
httpコールバック関数が完了し、値がベースラインに割り当てられると、それに応じてビューを更新するダイジェストサイクルがトリガーされます。アラート操作は同期して行われますが、HTTP操作の前にも完了するチャンスがあります – IAmDranged
すべてのソリューションをありがとうございます。しかし、私は今それをはるかに良く理解していますが、私はreact.jsを行ってしまいました。私はまだhttpコールバックと競争条件に問題がありますが、私はどのように乗っているかを教えてあげます。 –
実際、Reactには他の同様の問題がありました。それはコンポーネントのライフサイクルに関係します。私は、Angularを使用することに戻りました - 下の答えのおかげで。 –