首页 > 解决方案 > 为什么angular js找不到自定义控制器

问题描述

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

test_ctrl.js:

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

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

  }

索引.html:

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

index.js:

// Open the Modal // 
  $scope.openModal = function(ev) { 
    $mdDialog.show({
      controller: test_ctrl,  
      templateUrl: '/views/testview/testmodal.html',
      parent: angular.element($('.some_parent_class')),
      targetEvent: ev,
      clickOutsideToClose:true,
      locals: {},
      onRemoving: function (event, removePromise) {
      }
    });
  };
  //*/ 
});

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_ctrl”未在角度中定义...“错误。我做错了什么?

编辑 好的另一种解决方法是将控制器定义函数包含在与 index.js 相同的文件中,但我真的很想在 openModal 参数中包含外部控制器文件的位置,就像使用模态模板位置一样(模板网址:'/views/testview/testmodal.html')。控制器文件的位置是否有参数?

标签: javascriptangularjstwitter-bootstrapangularjs-controller

解决方案


控制器函数定义需要在index.js加载之前定义,所以在 index.html 中需要加载test_ctrl.jsbefore index.js

更简洁的替代方法是将控制器功能导入index.js.


推荐阅读