APIのMethodeがあります。 $ ctrl(?)オブジェクトに解決されるpromiseを返します。このオブジェクトには測定値が含まれている必要があり、新しいデータを受信するたびに更新されます。
getMeasurements.latest(filter) //only a object to filter through all measurements
.then(function (latestMeasurement) {
$ctrl.latestMeasurement = latestMeasurement;
});
私の問題は、このデータを操作する方法や、htmlファイルに表示する方法がわからないことです。 $ ctrlはどのように機能しますか?
ここで ドキュメント APIの
$ ctrlは、コントローラーのビューモデルオブジェクトです。この$ ctrlは選択した名前です(vmは別の最も一般的な名前です)。コードを確認すると、定義が$ctrl = this;
なので、基本的にはコントローラー関数のthis
キーワードです。
したがって、$ctrl.latestMeasurement = 'someValue'
を使用している場合は、コントローラー関数にプロパティlatestMeasurement
を追加しているようなものです。
では、HTMLでそれを使用する方法は?
HTMLのlatestMeasurementプロパティにアクセスするには、コードに<h1>{{$ctrl.latestMeasurement}}</h1>
が必要です(H1タグは単なる例です)。
ここで$ ctrlは、コントローラー部分で上で説明したものとは異なります。ここで、$ ctrlは、コントローラーのcontrollerAs
プロパティに使用される値です。ただし、$ctrl
はcontrollerAs
プロパティのデフォルト値であるため、コードにcontrollerAsプロパティが定義されていない可能性があるため、AngularはHTMLでデフォルト値$ctrl
を取ります。
これはほとんどの人が混乱するところです。それで説明させてください、
新しいコントローラーで、this
キーワードを変数vm
に宣言し、controllerAs
プロパティをmyCtrl
に設定したと仮定します。
コントローラのプロパティを定義する際のcontrollerAs: 'myCtrl'
。
コントローラ関数のvar vm = this;
。
この場合、jsでは値の設定にvm
を使用する必要があり、HTMLではmyCtrl
を使用する必要があります。例えば、
jSコントローラー関数でvm.test = 'Hello world';
hTMLで<span ng-bind="myCtrl.test"></span>
結果Hello worldがページに表示されます。
なぜ$ scopeではなく$ ctrlなのですか?
ビューモデルオブジェクトモデルの概念はAngularJS1.5で導入され、実際には$ scopeが存在しないAngular 2への移行の一部です。1.5では新しいアプローチが導入されましたが、$ scopeは削除されませんでした完全に。
答えがお役に立てば幸いです。
基本的なJavascriptの概念については、次を参照してください http://javascriptissexy.com/16-javascript-concepts-you-must-know-well/
AngularJS $ ctrlの概念の詳細については、 https://johnpapa.net/angularjss-controller-as-and-the-vm-variable/ を参照してください。
this についておしゃべりしていると思います。
この場合、
$ctrl.latestMeasurement
意味することができます:
$ ctrl、このコードを実行しているコントローラー。たとえば、$ scopeで変更しても、同じ結果が得られます。
latestMeasurement、測定値の最後の値を格納する変数。
私の見解を説明するために、以下のコードを見てみましょう
<div ng-app="MeasurementApp">
<div ng-controller="MeasurementController">
<h1>{{latestMeasurement2}}</h1>
</div>
</div>
Div内のlatestMeasurement2という変数とMeasurementControllerというコントローラーを表示する単純なangularjsアプリを見ることができます。次に、値を表示するには、コードを確認します。
angular.module('MeasurementApp', [])
// creating the controller
.controller('MeasurementController', function(c8yMeasurements, $scope) {
// creating the variable and let it empty by now.
$scope.latestMeasurement2 = "";
// Your code
var filter = {
device: 10300,
fragment: 'c8y_Temperature',
series: 'T'
};
var realtime = true;
c8yMeasurements.latest(filter, realtime)
.then(function (latestMeasurement) {
// The latestMeasurement is where the measurement comes
// Here we just assign it into our $scope.latestMeasurement2
$scope.latestMeasurement2 = latestMeasurement;
});
});
ドキュメントが言うように
// $scope.latestMeasurement2 will be updated as soon as a new measurement is received.
$scope.latestMeasurement2 = latestMeasurement;
お役に立てれば!