我可以在单独的JS文件中使用角度控制器和指令吗?

时间:2017-01-17 17:27:50

标签: javascript angularjs angularjs-directive

我使用的是角1.5.x。

我目前有两个文件,一个有指令,另一个是指令使用的控制器。

directive.js

(function(){
    var myApp = angular.module('legalentity');
  myApp.directive("banks", function() {
        return {
            controller: bankController,
            template: "<div ng-include='banks-tab.html'></div>"
        };
    });
}());

我有一个单独的文件,其中定义了BankController。

(function () {

    var myApp = angular.module("legalentity");

    myApp.controller("bankController", 'BankController');

    BankController.$inject = ['RDS_BASE_URL'];

    function BankController(RDS_BASE_URL) {
        var entityID = 1001;
        $scope.bankGrid = {
            dataSource: RDS_BASE_URL + '/entity/' + entityID + '/bankdetails/',
            filterRow: {
                visible: true
            },
            headerFilter: {
                visible: true
            },
            groupPanel: {
                visible: true
            }
        };
    }
}());

我的页面没有加载,因为指令找不到bankController 错误如下 ReferenceError:未定义bankController

请您告知如何解决这个问题?我想将控制器和指令保存在单独的JS文件中。

1 个答案:

答案 0 :(得分:1)

试试这个:

controller: 'bankController'

此外,而不是这一行:

myApp.controller("bankController", 'BankController');

写下这个:

myApp.controller("bankController", BankController);

以下是对正在发生的事情的解释:

当你编写controller:bankController时,它会尝试在你的directive.js中找到一个名为bankController的对象,它无法找到它。但是,当你说'bankController&#39;它试图在当前模块中找到具有此名称的对象。虽然它在一个不同的文件中,但是能够找到并使用它。

在第二种情况下,如果你说

myApp.controller("bankController", 'BankController');

它尝试将一个字符串分配给控制器,我认为这应该导致js错误(尝试检查你的控制台),因此你的控制器甚至不会因为这个错误而被创建。相反,我们将它分配给BankController,它是一个可以在文件中找到的函数,并将其用作控制器定义。