2016-03-27 55 views
1

我剛開始學習AngularJS並建立了一個小而簡單的應用程序,它由多個控制器如下所示:AngularJS控制器參考變得不確定

enter image description here

我有一個SiteMaster.html頁面,此頁面內我用ng-view如下所示:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

    <script src="Scripts/angular.min.js"></script> 
    <script src="Scripts/angular-route.min.js"></script> 
    <script src="Scripts/app.js"></script> <!-- Consists of Routing --> 
    <script src="Templates/Params/paramsController.js"></script> 

    <title>Angular Routing Tutorial</title> 
</head> 
<body ng-app="mainApp"> 
    <h1>sitemaster Template</h1> 
    <div ng-view></div> 
</body> 

</html> 

正如你所看到的最後一個腳本標籤的PARAMS頁面控制器,理想情況下,我不想在Si這個腳本標籤參考teMaster而不是我想這樣,它只有裝在需要時,現在我已經搬到從SiteMaster.Htmlparams.Html頁面這個腳本標籤將其放置在params.HTML頁面中,如下所示:

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

<div ng-controller="paramsCtrl"> 
    <h1> 
     Passed a parameter via url 
    </h1> 
</div> 

然而,當我運行該項目,我得到以下錯誤:

Error: [ng:areq] http://errors.angularjs.org/1.5.2/ng/areq?p0=paramsCtrl&p1=not%20a%20function%2C%20got%20undefined 

所以我的問題是,我該如何得到這個paramsController.js參考params.html頁面內工作?而不是在SiteMaster.html頁面上?

請注意,當paramsController.js放置在SiteMaster.Html頁面內時,它將按預期工作。

任何幫助,將不勝感激。

更新 加入ocLazyLoad後,我也做了以下內容:

添加腳本參考sitemaster.html

裏面我app.js我也做了以下內容:

var app = angular.module('mainApp', ['ngRoute', "oc.lazyLoad"]); 

在我的paramsController.js裏面我有以下內容:

angular.module("mainApp").controller('paramsCtrl', function ($scope, $routeParams, $ocLazyLoad) { 

console.log($routeParams); 

var param1 = $routeParams.page_number; 

alert(param1); 

}); 

現在我打了一個路障,我不確定在哪裏或者如何去通過ocLazyLoad加載這個控制器?我遵循以下文檔:https://oclazyload.readme.io/docs

+0

我覺得paramsController的路徑在params.Html文件中不正確。 –

回答

0

首先,你的路徑是錯誤的。更改

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

<script src="Templates/Params/paramsController.js"></script> 

此外,包括在你的<head>部分如下:

<base href="/"> 

第二件事,我不知道,甚至會無法正常工作Angular已經初始化。所以你需要使用像ocLazyLoaded這樣的庫來動態加載資源。

另外,還要考慮閱讀這篇文章https://stackoverflow.com/a/17675432/2405040

更新:

在你params.html

<!-- Remove this line 
<script src="paramsController.js"></script> 
--> 

<div ng-controller="paramsCtrl"> 
    <h1> 
     Passed a parameter via url 
    </h1> 
</div> 

現在修改$routeProvider配置:

(從文檔https://oclazyload.readme.io/docs/with-your-router

$routeProvider. 
    when('/foo', { 
     templateUrl: 'Templates/Params/params.html', 
     resolve: { 
      loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) { 
       // you can lazy load files for an existing module 
       return $ocLazyLoad.load('Templates/Params/paramsController.js'); 
      }] 
     } 
    }) 
+0

我已經試過這個,但是我仍然得到相同的錯誤,當你說添加以下頭部分是sitemaster或params.html頁面? –

+0

你嘗試過'ocLazyLoaded'庫嗎? –

+0

還沒有,只是試着你提供的以下選項 –