2016-11-03 5 views
0

以下で説明する内容を達成するためのより良い方法があることを知りたいと思います。Angular.jsのBluetooth Low-Energyデバイスのプロパティを更新する正しい方法は何ですか?

のは私が配列にロード数の同一のBluetooth LEデバイスを持っているとしましょう:

var bleDevices = []; 

上記の特性を利用して、ユーザインターフェース上で更新する必要があるいくつかの指標とスイッチがあります。デバイスがそうようDOMに取り付けられている。

$scope.devices = getAllDevices(); 

各デバイスは、物理的な周辺機器の現在の状態を表し、それに関連付けられたプロパティの束を有します。

onDeviceDiscoveryCallback(device){ 

    addDeviceToArray({ 

    /** The first three properties are returned by the callback */ 
    name:device.name, 
    rssi:device.rssi, 
    id:device.id 

    /** The rest of the object contains developer defined properties */ 
    acceleration:null, 
    temperature:null, 
    brightness:null, 
    . 
    . 
    . 

    }) 
} 

上記のデバイスでアレイを充填した後、デバイスに接続します。 onConnectコールバックは、デバイスオブジェクト、Iは、アレイから自分のデバイスをつかむために使用したのIDを返す:

onConnectCallback(device){ 

var arrayDevice = getDeviceByID(device.id); 

} 

私はそのようになど、さまざまな工場全体に必要とされる特性を更新するために進む。

var updateAcceleration = function(arrayDevice){ 

    arrayDevice.acceleration = someValue; 
}; 

これは工場で起こっているので、$ scopeは利用できません。代わりに、私はどこでも$ rootScopeを使用しているように見えますが、アプリケーションをかなり大きく複雑にするのは非常に扱いにくいのですが、モデルをインタフェースにバインドする方法が原因です。

私の質問は、中央のBLEデバイスオブジェクトを使用してユーザーインターフェイスを更新するより良い方法はありますか?正直に言うと

感謝

答えて

0

は、私は質問次苦労しました。大きなスニペット(表示される場所を含む)を使用したより具体的な例が役立ちます。

それでも、角度にお​​けるデータ管理(税込サードパーティの変化が。)一般的に類似しているので、私は方法を提案しようとすることができます:

は、

サービスはシングルトンある工場独自のブルートゥースデータ/状態を確認しますアプリケーション全体のシングルトンデータ+ロジックを格納するのに適しています。 Bluetooth工場に

getAllDevices() // returns data that you want to show on screen と、関連するBluetoothデータを更新する必要がある場合はupdateData()とすることをおすすめします。任意のコントローラで

、などあなたはBluetooth工場を注入することができますし、チェーン化の範囲を気にせずに$scope.devices = Bluetooth.getAllDevices();を使用することができます

サードパーティのコールバックからアプリケーションで何かを変更した場合の外周りの角度ノウハウが

を変更してみましょう(例えば、onDeviceDiscoveryCallbackのサードパーティ製ライブラリの機能で、この機能でアプリケーション内の何かを変更した場合、角度は変更に関する考え方がなく、画面は更新されません)$rootScopeを工場に注入してから$rootScope.$digest()角度を知らせるために行われますd。第三者によって。

結論

angular.factory("Bluetooh", function($rootScope) { 
    var devicesData = []; 

    thirdPartyBTLibrary.onDeviceDiscovery(function (device) { 
    devicesDara.push(device); 
    $rootScope.$digest(); // yo angular, there is an updat 
    }); 

    return { 
    getDevicesData: function() { return devicesData; } 
    } 
}) 


angular.controller("random", function(Bluetooh) { 
    $scope.devices = Bluetooh.getDevicesData(); 
}); 

我々は唯一の外の変更を通知する$rootScopeを使用し、それを汚しません。 シングルトンエンティティの真実と孤立した更新ロジックのソースを作成しました。 私たちは、このエンティティから私たちが望み、画面に表示するだけのデータを得ました。

関連する問題