在函数

时间:2016-09-01 23:36:35

标签: javascript angularjs angularjs-directive angularjs-scope

尝试按照一些示例,但我得到 app未定义

app.js

(function () {
   "use strict";
   var app = angular.module("deviceManagement",['angularUtils.directives.dirPagination']);
}());

所以我希望能够使用或附加到" app"

我有一个控制器js文件

(function () {
   "use strict";
angular
    .module("deviceManagement")
    .controller("DeviceListCtrl",
    ProductListCtrl);

function ProductListCtrl($http, $scope) {
    var vm = this;

    vm.devices = [];

    deviceList();


    function deviceList() {

      //..........
    }

  }
} ());

根据上述规则,我是这样做的

app.filter('deviceStatus', function () {

    var deviceStatusLookup = {
        1: "New Device",
        2: "Activated",
        3: "Unactivated"
    };

    return function (statusId) {
        var output = deviceStatusLookup[statusId];
        return output;
    }
});
页面控制台上的

错误

deviceListCtrl.js:73 Uncaught ReferenceError: app is not defined

2 个答案:

答案 0 :(得分:3)

检查您是否已包含app.js文件。

另外,我会改变以下内容:

app.filter('deviceStatus', function () {

到此:

angular
    .module("deviceManagement")
    .filter('deviceStatus', function () {

最好不要使用var app并只是引用模块,例如angular.module( “deviceManagement”)。请参阅此answer

答案 1 :(得分:0)

在你的情况下,问题是在这里:

(function () {
   "use strict";
   var app = angular.module("deviceManagement",['angularUtils.directives.dirPagination']);
}());

lambda函数中有app,它就在那里。

要使其有效,您应该:

(function (window) {
   "use strict";
   var app = angular.module("deviceManagement",['angularUtils.directives.dirPagination']);
   window.app = app || {};
}(window));

因此,我们在lambda中注入window元素,以便您可以全局定义appwindow.app = app || {})。

  

注意:请考虑window.app方法不是最佳方法。

可能angular.module("deviceManagement")语法是最好的方法,可以使代码更加模块化。