2014-02-19 30 views
0

我一直在嘗試使用Worklight和AngularJS構建一個混合Web應用程序,並且遇到了在設備上工作的導航問題。 我有一個簡單的主屏幕,只有一個按鈕。一旦我點擊這個按鈕,它應該帶我到第2頁(serviceList頁面)。當我按下按鈕時,什麼都沒有發生。 其實我現在在頁面上有兩個按鈕,一個使用<a href>標籤,另一個使用ng-click="viewServiceTickets()",在viewServiceTickets()函數中我使用$location.path('serviceList');(也試過'/ serviceList'和'#/ serviceList',因爲有些人有一直在暗示)但無濟於事。如何在Worklight中使用angularjs路由?

如果我運行它:

  • 在預覽模式下 - 它的工作原理
  • 在移動瀏覽器模擬器 - 它的工作原理
  • 在iPhone模擬器 - 它的工作原理
  • 在iOS設備上 - IT故障(即當我按下按鈕或<a href時,沒有任何反應,並且我看到日誌中沒有錯誤。)

我的角度配置看起來像這樣

var serviceApp = angular.module('serviceApp', ['ngRoute', 'ngTouch']); 
var serviceControllers = {}; 
serviceApp.controller(serviceControllers); 

serviceApp.config(function ($compileProvider){ 
    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/); 
}); 

//This configures the routes and associates each route with a view and a controller 
serviceApp.config(function ($routeProvider) { 
    $routeProvider 
     .when('/', 
      { 
       controller: 'HomePageController', 
       templateUrl: 'views/HomePage/homePage.html' 
      }) 
     .when('/serviceList', 
      { 
       controller: 'ServiceTicketListController', 
       templateUrl: 'views/ServiceTicketList/serviceTicketList.html' 
      }) 
     .otherwise({ redirectTo: '/' }); 
}); 

而且我main.js文件有

function wlCommonInit(){ 
    document.addEventListener("deviceready", onDeviceReady, true); 
} 


function onDeviceReady() { 
    angular.bootstrap(document); 

} 

主頁是很簡單的

<div id="splashPage"> 
    <div> 
     <h2>Service Ticket Viewer</h2> 
     <button type="button" data-ng-click="viewServiceTickets()">View Service Tickets</button> 
     <div class="mainBtnContainer"> 
      <a href="#/serviceList" > 
       <img src="images/technical-support.png"> 
      </a> 
     </div> 

    </div> 
</div> 

最後我控制器

serviceControllers.HomePageController = function ($scope, $location, $window, TicketService) { 


    $scope.currentServiceTicket = {};  

    init(); 

    function init() { 
     console.log("Initialisation of HomePageController complete"); 
    } 

    $scope.viewServiceTickets = function() { 
     //$locationProvider.html5Mode(true); 
     $location.path("/serviceList"); 
    }; 

    $scope.goBack = function() { 
     console.log("Going Back"); 
     $window.history.back(); 
    }; 


}; 

我看了,並嘗試許多建議已不出現爲我工作:

我忘了補充我的主要index.html頁面。所有頁面片段都通過data-ng-view指令注入到div中。

<!DOCTYPE HTML> 
<html data-ng-app="serviceApp"> 
<head> 
<meta charset="UTF-8"> 
<title>index</title> 
<meta name="viewport" 
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"> 

<meta name="format-detection" content="telephone=no"> 
<meta name="apple-mobile-web-app-capable" content="yes"> 
<meta name="apple-mobile-web-app-status-bar-style" content="black"> 


<link rel="shortcut icon" href="images/favicon.png"> 
<link rel="apple-touch-icon" href="images/apple-touch-icon.png"> 
<link rel="stylesheet" href="css/main.css"> 

<script>window.$ = window.jQuery = WLJQ;</script> 

<script src="js/angularjs/angular.js"></script> 
<script src="js/angularjs/angular-touch.js"></script> 
<script src="js/angularjs/angular-route.js"></script> 
<script src="js/angularjs/angular-animate.js"></script> 

</head> 
<body style="display: none;"> 

    <div> 
     <div data-ng-view=""></div> 
    </div> 

    <script src="js/initOptions.js"></script> 
    <script src="js/main.js"></script> 
    <script src="js/messages.js"></script> 

    <script src="js/router.js"></script> 

    <!-- Controllers --> 
    <script src="views/HomePage/homePageController.js"></script> 
    <script src="views/ServiceTicketList/serviceTicketListController.js"></script> 
    <script src="views/ServiceTicketDetails/serviceTicketDetailsController.js"></script> 

    <!-- Services --> 
    <script src="js/models/serviceTickets.js"></script> 


</body> 
</html> 

我在工作燈工作室6.1運行和angularjs 1.2.13

任何想法?我確信(希望)我做過/沒有做過的事情是愚蠢的。

+0

IMO的問題標題是誤導。這個問題與AngularJS無關。它是關於在基於Worklight的應用程序中的頁面之間導航的。 –

+0

@Idan:並不像AngularJS有處理單頁面應用程序的機制,這正是我想要做的。我嘗試了默認機制,它可以在設備上運行。因此,處理SPA的AnglularJS模型可能與WL不兼容。我希望在不使用任何JQuery功能的情況下做到這一點,但這可能是不可能的。我會使用std方法去看看它,看看如何整合Angular。 –

+0

此外,我知道iOS模擬器和設備之間存在差異,但我也很好奇它爲什麼只在設備上失敗。 –

回答

2

咄!其實是錯誤的。知道它必須是簡單的東西。

我花了一段時間來跟蹤在日誌中顯示沒有錯誤。我附加了Safari web instpector並沒有看到任何東西。然後,我使用切換到調試器,並設置一個「所有例外」斷點,然後我看到錯誤「文件未找到」

問題是網絡和iOS模擬器是不區分大小寫的文件名,而設備是大小寫敏感。所以只是文件名中的拼寫錯誤。

對我來說這是個好消息,因爲角是管理的雙向數據綁定一個很好的途徑,也是在SPA的路由,並與工作燈很好地工作,而不需要的JQuery /道場等

+0

好消息。請標記爲已回答。 –

0

這個國際海事組織與AngularJS沒什麼關係......你的Worklight應用程序中任何地方的任何地方都有

我建議您先閱讀爲此目的提供的培訓材料,並瞭解Worklight是單頁面應用程序的概念。

您不能使用類似<a href="pages/page2.html">的東西,以在應用程序中的頁面之間導航。通過這樣做,您可以從應用程序的主HTML文件(index.html)導航遠離,從而失去Worklight上下文。正是這種「上下文」,基本上就是HTML文件中所有對CSS和JS文件的引用,它們將應用程序粘合在一起。當這種損失發生時,應用程序將停止運行。

還有現在關於這一問題的許多問題,如果需要的話就來看看這些和搜索其他:

另請參閱以下示例項目。
他們不使用AngularJS,而是通過使用jQuery的load或jQuery Mobile的changePage/pageShow解釋如何在基於Worklight的應用程序中的頁面之間導航。

在此之上,只要你的網頁之間導航得當,你可以添加你想,以構建應用程序的任何框架,無論是AngularJS或者其他。


另請注意,deviceready的eventListener是完全不需要的。您已達到wlCommonInit()並且您的代碼正在執行的事實意味着Cordova(Worklight框架的組成部分)已成功加載,並且已調用deviceready(內部)。你應該刪除這個eventListener。

+0

我忘了添加主index.html頁面 –

+0

@ IBMUser1,這個問題解決了嗎? –