为cordova和网站的流星应用程序使用不同的客户端代码库

时间:2014-11-24 09:30:41

标签: angularjs cordova meteor ionic-framework

我知道在这个问题上还有其他(相当古老的)问题,但我没有看到流星1.0的任何答案。我正在构建一个针对移动设备和桌面设备的应用。

我移植了一个用离子创建的现有移动客户端,它运行良好。现在我想设置桌面客户端部分,不想在任何地方添加“if(Meteor.isCordova){”子句。我可以分享我的一些自定义Angular指令或服务,但Ionic只是移动目标,所以我想要明确的代码分离。

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

如何将包用于共享逻辑并拥有两个不同的流星项目或包?一个用于网络(例如流星+自举),另一个用于移动(例如流星+离子)?

也许是这样的:https://github.com/Compy/meteor-mobile-desktop

答案 1 :(得分:1)

你或许可以做我以下所做的事情。基本思想是有三个角度模块。一个主要模块将具有在桌面和移动版本中通用的所有共享角度代码。然后,您需要另外两个模块,每个模块用于将主模块作为依赖项的桌面和移动版本。

首次加载页面时,您只需运行Meteor.isCordova()一次。根据结果​​,您可以引导主模块以及桌面或移动版本。

这意味着您只需在每个版本中加载所需的内容。例如。我还没有完成它,因为该片段不会运行,但只有在桌面应用程序中没有使用Ionic时,才应将Ionic注入移动模块。

如果我误解了您的设置,请道歉,但如果没有看到它,很难弄明白。



// Module for web and mobile application (common functionality).
angular.module('App', []);

// Module for web application.
angular.module('WebApp', ['App'])
  .controller('TestController', function ($scope) {
    $scope.message = 'This is the web application.';
  });

// Module for mobile application.
angular.module('MobileApp', ['App'])
  .controller('TestController', function ($scope) {
    $scope.message = 'This is the mobile application.';
  });


(function () {
   
  // Simulate Meteor.isCordova().
  var isCordova = true;
  
  // Bootstrap correct version of the application.
  if (isCordova) {
    angular.bootstrap(document, ['App', 'MobileApp']);
  } else {
    angular.bootstrap(document, ['App', 'WebApp']);
  }

})();

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="TestController">
  {{ message }}
</div>  
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我之前也问了这个问题,但没有得到答案。

您可以使用两个不同的路由器。一个用于Web,一个用于移动。这样你只需要一个isCordova语句。 然后将Web和移动客户端文件分成不同的文件夹。