我正在使用angular 1.5.x。

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

指令

(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文件中。

最佳答案

尝试这个:

controller: 'bankController'


另外,代替此行:

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


这样写:

myApp.controller("bankController", BankController);


这是对发生的情况的解释:

当您编写controller:bankController时,它将尝试在无法查找到的directive.js中找到一个名为bankController的对象。但是当您说“ bankController”时,它将尝试在当前模块中查找具有该名称的对象。尽管它在另一个文件中,但是angular可以找到并使用它。

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

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


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

关于javascript - 我可以在单独的JS文件中使用 Angular Controller 和指令吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41703379/

10-13 00:33