angularjs - 来自 Angular 的错误,AngularJS 1.3 想要 ngMessages 注入(inject)

标签 angularjs

我已经包含了 angular-messages.js,如下面的索引所示。当我运行我的应用程序时,我收到错误:

Error: [$compile:ctreq] Controller 'ngMessages', required 
       by directive 'ngMessage', can't be found!

我的registration.js 非常简单,我相信我正确地完成了依赖。它看起来如下:
angular.module('registrationController',
  ['ngMessages']).controller('RegistrationCtrl',
  ['$scope','ngMessages',
     function ($scope) {
         var vm = this;
     }]);

<script src="js/angular.js"></script>
<script src="js/angular-messages.js"></script>
<script src="js/angular-route.js"></script>
<script src="js/angular-resource.js"></script>

<script src="app/app.js"></script>
<script src="app/controllers/registration.js"></script>

--
<form novalidate="novalidate" ng-submit="registerForm()"
      ng-controller="RegistrationCtrl">

我对 Angular 比较陌生,所以我不太确定我得到 DI 100%。我假设 ngMessages 是由于包含数组而被注入(inject)的,但由于我没有在 Controller 中使用它,所以我不需要在函数中提及它。

最佳答案

ngMessages 在您的模块中是必需的,但不是您的 Controller 。

ngMessages 是指令而不是服务,请查看此文档

  • https://docs.angularjs.org/api/ngMessages/directive/ngMessages

  • 这就是您将其定义为 angularJs 模块要求的方式
      angular.module('myModule', ['ngMessages']);
    

    然后你可以像这样在你的html中使用:
    <form name="myForm">
    <input type="text" ng-model="field" name="myField" required minlength="5" />
    <div ng-messages="myForm.myField.$error">
      <div ng-message="required">You did not enter a field</div>
      <div ng-message="minlength">The value entered is too short</div>
    </div>
    </form>
    

    编辑:这是一个工作样本

    1- Index.html 应该是:
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body ng-app="registerApp" ng-controller="RegistrationCtrl">
    
        <form name="myForm">
            <input type="text" ng-model="field" name="myField" required minlength="5" />
            <div ng-messages="myForm.myField.$error">
                <div ng-message="required">You did not enter a field</div>
                <div ng-message="minlength">The value entered is too short</div>
            </div>
        </form>
    
        <script src="Scripts/angular.js"></script>
        <script src="Scripts/angular-messages.js"></script>
        <script src="app.js"></script>
    </body>
    </html>
    

    2-app.js
    angular
        .module('registerApp', ['ngMessages'])
        .controller('RegistrationCtrl',
      ['$scope',
         function ($scope) {
             var vm = this;
         }]);
    

    编辑 2:基本上对于 ngMessages 因为它是一个指令,您只需要将指令定义的模块添加到应用程序模块依赖项中,并且不需要向 Controller 中注入(inject)任何东西。也许您可以从 Controller 中获取要绑定(bind)的错误消息。

    希望有帮助。

    关于angularjs - 来自 Angular 的错误,AngularJS 1.3 想要 ngMessages 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568197/

    相关文章:

    javascript - 表单中的数据不会传递给提交函数 - 使用 Angular

    javascript - 如何使用 ng-click 在 URL 中传递参数(id)以查看 Angularjs 中特定用户的子文档

    angularjs - 如何使用 npm install 解决隧道套接字错误?

    javascript - 如何让具体化固定 Action 按钮在 Angular 2 中工作

    javascript - 第一次加载页面时显示事件颜色 - AngularJS

    AngularJS - 如何从链接函数访问隔离范围?

    javascript - 使用 ng-repeat 填充 "x - available elements"的剩余元素

    javascript - 重新编译文档中新加载的正文元素 - Angular

    javascript - Angular.js,如何检查 Controller 中的身份验证服务

    angularjs - bool 值上的 ng-repeat 过滤器