2015-03-31 34 views
0

這是我第一次嘗試創建示例角度應用程序。 在app.js予定義的下列 -角度js應用程序未定義警告

var app = angular.module('myTestApp', ['ngCookies', 
             'ngResource', 
             'ngRoute', 
             'ngSanitize', 
             'ngTouch']); 

app.config(function ($routeProvider) { 
routeProvider 
.when('sample', { 
    templateUrl: 'views/sample.html', 
    controller: 'sampleCtrl' 
    }) 
}); 

我已經創建對應sample.js爲控制器,sample.html爲模板和sampleModel.js爲模型。 在咕嚕控制檯,它拋出app不是在控制器和模型文件 這裏定義的控制器文件 -

'use strict'; 
app.controller('SampleCtrl', function ($scope, 
             $location, 
             $routeParams, 
             SampleModel) { 

console.log('this is a test controller'); 
}); 

所有文件都包含在index.html,然後資源被正確加載,我檢查由鉻開發人員工具,但我找不到它說的應用程序沒有定義的原因。有什麼我失蹤?

回答

2

由於它們是單獨的文件,grunt/jshint不知道該變量在其他文件中可用。相反的,這將是一個最佳實踐,以這種方式使用它:

而是使用此:

angular.module('myTestApp') 
.controller('SampleCtrl', function ($scope, 
             $location, 
             $routeParams, 
             SampleModel) { 

console.log('this is a test controller'); 
}); 

你可能在其他大部分的代碼已經注意到另一種通用的模式,包裝的IIFE裏面的代碼。

(function() { 
"use strict"; 

var app = angular.module('myTestApp') 
    app.controller('SampleCtrl', function ($scope, 
              $location, 
              $routeParams, 
              SampleModel) { 

    console.log('this is a test controller'); 
    }); 

})(); 

在這個應用程序不會污染全局名稱空間,它是本地的功能。

在這裏,如果你已經注意到,我沒有使用[]而使用angular.module(),這意味着我們剛剛獲得該模塊。 。

在你的應用程序

所以很孤獨,它會隨着[]和其他文件,而無需[]

(function() { 
    "use strict"; 

    var app = angular.module('myTestApp', ['ngCookies', 
             'ngResource', 
             'ngRoute', 
             'ngSanitize', 
             'ngTouch']); 

    app.config(function ($routeProvider) { 
     $routeProvider 
     .when('sample', { 
      templateUrl: 'views/sample.html', 
      controller: 'sampleCtrl' 
      }) 
    }); 

    })(); 
+0

按照你的方法。有效。 – Akg 2015-03-31 10:56:55

+0

太棒了!很高興幫助:) – mohamedrias 2015-03-31 11:37:46

1

如果一切是好的,這條線是導致該問題在你的代碼 -

app.config(function ($routeProvider) { 
routeProvider 

你應該使用 -

app.config(function ($routeProvider) { 
$routeProvider 

而且是的,如果var app不工作,請嘗試使用

angular.module('myTestApp') 
.controller('SampleCtrl',... 
+0

。沒有[]模塊沒有爲我工作,如上所述。但是,以下修改後的代碼確實如此: 'angular.module('myTestApp',[]) .controller('SampleCtrl',...' – 2017-10-17 03:22:30