如何在Angular中使用这个js脚本:我必须创建一个服务吗?

时间:2015-07-05 16:37:46

标签: javascript angularjs

我正在尝试使用外部蓝牙传感器创建一个小型物联网项目。我正在使用TI的SensorTag,我有几个js库来管理它。

此时我正在使用带有一些js代码的简单HTML页面,我想使用Angular将我的项目移动到Ionic Framework。

<script>
  // Globals.
  var sensortag
  var values;
  var compensationX = 0;
  var compensationY = 0;

  function initialise()
  {
    initialiseSensorTag()
  }

  function initialiseSensorTag()
  {
    // Create SensorTag CC2650 instance.
    sensortag = evothings.tisensortag.createInstance(
      evothings.tisensortag.CC2650_BLUETOOTH_SMART)

    // Set up callbacks and sensors.
    sensortag
      .statusCallback(statusHandler)
      .errorCallback(errorHandler)
      .keypressCallback(keypressHandler)
      .accelerometerCallback(accelerometerHandler, 100)
  }

  function connect()
  {
    sensortag.connectToNearestDevice()
  }

  function disconnect()
  {
    sensortag.disconnectDevice()
    displayStatus('Disconnected')
  }

  function statusHandler(status)
  {
    displayStatus(status)

    if (evothings.tisensortag.ble.status.SENSORTAG_ONLINE == status)
    {
      // displaySprite()
    }
  }

  function errorHandler(error)
  {
    if (evothings.easyble.error.DISCONNECTED == error)
    {
      displayStatus('Disconnected')
      // sprite.hide()
    }
    else
    {
      displayStatus('Error: ' + error)
    }
  }

  function keypressHandler(data)
  {
    compensationX = values.x;
    compensationY = values.y;

  }

  function accelerometerHandler(data)
  {
    values = sensortag.getAccelerometerValues(data);
    var rawX = values.x; 
    var rawY = values.y;
    var degreeX = rawX - compensationX;
    var degreeY = rawY - compensationY;

  }


  document.addEventListener(
    'deviceready',
    function() { evothings.scriptsLoaded(initialise) },
    false)
  </script>

我的想法是创建一个服务,但我无法想象如何管理addEventListener以及初始化。 我开始使用此代码:

app.factory('SensorFactory', function(){

    var sensortag
    var values;
    var compensationX = 0;
    var compensationY = 0;

    return {
        initialiseSensorTag: function(){
            sensortag = evothings.tisensortag.createInstance(
          evothings.tisensortag.CC2650_BLUETOOTH_SMART)

        // Set up callbacks and sensors.
        sensortag
          .statusCallback(statusHandler)
          .errorCallback(errorHandler)
          .keypressCallback(keypressHandler)
          .accelerometerCallback(accelerometerHandler, 100)
        }  

        connect: function(){
        sensortag.connectToNearestDevice()
      }
    }               
});

但我有两个问题:

1)我如何管理这部分js:

document.addEventListener(
    'deviceready',
    function() { evothings.scriptsLoaded(initialise) },
    false)

2)我可以将传感器值(值)保存到我的应用范围内吗?我的应用需要它们。

1 个答案:

答案 0 :(得分:0)

对于deviceready,请使用scope.on($ viewContentLoaded,$ stateChangeSuccess)或其他适合您需求的内置侦听器。