Javascript 为什么可以';t角js can';找不到自定义控制器

Javascript 为什么可以';t角js can';找不到自定义控制器,javascript,angularjs,twitter-bootstrap,angularjs-controller,Javascript,Angularjs,Twitter Bootstrap,Angularjs Controller,我在一个单独的文件中创建了一个自定义angularjs控制器,调用方也在一个单独的文件中打开。但由于某些原因,angularjs给出的错误控制器没有定义。以下是文件: test_ctrl.js: function test_ctrl($scope, $rootScope, apiSrvc, $mdDialog) { $scope.hide = function() {$mdDialog.hide();}; $scope.cancel = function() {$mdDialo

我在一个单独的文件中创建了一个自定义angularjs控制器,调用方也在一个单独的文件中打开。但由于某些原因,angularjs给出的错误控制器没有定义。以下是文件:

test_ctrl.js:

function test_ctrl($scope, $rootScope, apiSrvc, $mdDialog) {

    $scope.hide = function() {$mdDialog.hide();};
    $scope.cancel = function() {$mdDialog.cancel();};

  }
index.html:

<button id="testbutton" ng-click="openModal($event)">open modal</button>
testmodal.html:

<md-dialog>
    <md-dialog-content>
        testing content
    </md-dialog-content>
    <md-dialog-actions layout="row">
        <md-button ng-click="cancel()">Close</md-button>
    </md-dialog-actions>
</md-dialog>

测试内容
关
好的,总结一下这个过程,index.html中的按钮将打开一个角度模态对话框。因此,对于index.html中的按钮,我包含了“ng click=“openModal($event)”来触发角度事件以打开角度模式。我不知道我缺少了什么或做错了什么,但在控制台中单击按钮时,我得到了“test\u ctrl”未在角度中定义…”错误。 我做错了什么

编辑
好的,另一种解决方法是在index.js相同的文件中包含控制器定义函数,但我确实希望在OpenModel参数中包含外部控制器文件的位置,就像您可以使用模式模板位置一样(templateUrl:“/views/testview/testmodal.html”).是否有控制器文件位置的参数?

在加载
index.js
之前需要定义控制器函数定义,因此在index.html中,您需要在
index.js
之前加载
test\u ctrl.js

更干净的替代方法是在
index.js
中导入控制器函数

我将控制器放入外部文件,并让OpenModel angular方法调用它。是否有方法在OpenModel参数中定义控制器文件的位置

将控制器定义为模块的一部分:

angular.module("test",[])
.controller("test_ctrl",
  function test_ctrl($scope, $rootScope, apiSrvc, $mdDialog) {
    $scope.hide = function() {$mdDialog.hide();};
    $scope.cancel = function() {$mdDialog.cancel();};
})
在主模块中,将其声明为依赖项:

angular.module("app",['test'])
在模式中,使用字符串调用:

  $scope.openModal = function(ev) { 
    $mdDialog.show({
      controller: ̶t̶e̶s̶t̶_̶c̶t̶r̶l̶,̶ "test_ctrl",  
      templateUrl: '/views/testview/testmodal.html',
      parent: angular.element($('.some_parent_class')),
      targetEvent: ev,
      clickOutsideToClose:true,
      locals: {},
      onRemoving: function (event, removePromise) {
      }
    });
  };
有关详细信息,请参阅



当将其定义为模块的一部分时,我可以将该代码放在外部文件中,对吗?而不显式地告诉angular它在哪里或将其包含在脚本标记中,对吗

包含模块的文件可以按任何顺序加载(在
angular.js
之后)。当框架找到
ng app
指令并构建应用程序时,将对依赖项进行排序


有关更多信息,请参见

等待您告诉我angular找不到?我是否可以在index.js中定义的OpenModel函数中定义该位置?您是否将控制器放在全局范围内?还是将其包含在模块中?@georgeawg我将控制器放在外部文件中,并让OpenModel angular方法调用它。是否有一种在OpenModel参数中定义控制器文件位置的方法?当将其定义为模块的一部分时,我可以将该代码放入外部文件中,而无需明确告知angular文件的位置或将其包含在脚本标记中。是否有一种方法可以找到所有已定义的全局angular js模块?这可能需要作为一个新问题。
  $scope.openModal = function(ev) { 
    $mdDialog.show({
      controller: ̶t̶e̶s̶t̶_̶c̶t̶r̶l̶,̶ "test_ctrl",  
      templateUrl: '/views/testview/testmodal.html',
      parent: angular.element($('.some_parent_class')),
      targetEvent: ev,
      clickOutsideToClose:true,
      locals: {},
      onRemoving: function (event, removePromise) {
      }
    });
  };