首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么js不能找到自定义控制器

为什么js不能找到自定义控制器
EN

Stack Overflow用户
提问于 2018-08-16 18:14:05
回答 2查看 95关注 0票数 0

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

test_ctrl.js:

代码语言:javascript
代码运行次数:0
运行
复制
function test_ctrl($scope, $rootScope, apiSrvc, $mdDialog) {

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

  }

index.html:

代码语言:javascript
代码运行次数:0
运行
复制
<button id="testbutton" ng-click="openModal($event)">open modal</button>

index.js:

代码语言:javascript
代码运行次数:0
运行
复制
// 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:

代码语言:javascript
代码运行次数:0
运行
复制
<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”不是在角.“错误中定义的。我做错了什么?

编辑 Ok的另一种方法是将控制器定义函数包含在与index.js相同的文件中,但我非常希望在openModal参数中包括外部控制器文件的位置,就像您可以使用模态模板位置一样(templateUrl:‘/view/testview/testmodal.html’)。是否有控制器文件位置的参数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-16 18:36:17

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

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

代码语言:javascript
代码运行次数:0
运行
复制
angular.module("test",[])
.controller("test_ctrl",
  function test_ctrl($scope, $rootScope, apiSrvc, $mdDialog) {
    $scope.hide = function() {$mdDialog.hide();};
    $scope.cancel = function() {$mdDialog.cancel();};
})

在主模块中,将其声明为依赖项:

代码语言:javascript
代码运行次数:0
运行
复制
angular.module("app",['test'])

在该模型中,使用字符串调用:

代码语言:javascript
代码运行次数:0
运行
复制
  $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) {
      }
    });
  };

有关更多信息,请参阅AngularJS开发人员指南-模块

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

包含模块的文件可以按任何顺序加载(在angular.js之后)。当框架找到ng-app指令并构建应用程序时,依赖项就会被整理出来。

有关更多信息,请参阅约翰帕帕AngularJS风格指南-模块

票数 1
EN

Stack Overflow用户

发布于 2018-08-16 18:19:12

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51883083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档