【问题标题】:AngularJS - $injector:modulerr Module Error in angular.js:36AngularJS - angular.js:36 中的 $injector:modulerr 模块错误
【发布时间】:2016-06-22 15:48:26
【问题描述】:

首先,真心希望得到大家的理解和包容。这个问题非常具体,所以请不要再激进/否决/搁置。我们都在这里学习新事物并分享知识,而不是侵略。非常感谢。

问题:我正在尝试关注this example,但这似乎在 Chrome 中没有显示任何内容。 The link 显示预期内容。我得到的只是浏览器中的空白页面。谁能说出具体原因?

    <!DOCTYPE HTML>
<html ng-app="autocompleteDemo">
    <head>
        <!--[if IE]>
            <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
          <![endif]-->
        <title>Shanid KV | AngularJS Dynamic Form Fields</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js"></script>
        <script type="text/javascript">

              angular
                  .module('autocompleteDemo', ['ngMaterial'])
                  .controller('DemoCtrl', DemoCtrl);

              function DemoCtrl ($timeout, $q, $log) {
                var self = this;
                self.simulateQuery = false;
                self.isDisabled    = false;
                // list of `state` value/display objects
                self.states        = loadAll();
                self.querySearch   = querySearch;
                self.selectedItemChange = selectedItemChange;
                self.searchTextChange   = searchTextChange;
                self.newState = newState;
                function newState(state) {
                  alert("Sorry! You'll need to create a Constituion for " + state + " first!");
                }
                // ******************************
                // Internal methods
                // ******************************
                /**
                 * Search for states... use $timeout to simulate
                 * remote dataservice call.
                 */
                function querySearch (query) {
                  var results = query ? self.states.filter( createFilterFor(query) ) : self.states,
                      deferred;
                  if (self.simulateQuery) {
                    deferred = $q.defer();
                    $timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
                    return deferred.promise;
                  } else {
                    return results;
                  }
                }
                function searchTextChange(text) {
                  $log.info('Text changed to ' + text);
                }
                function selectedItemChange(item) {
                  $log.info('Item changed to ' + JSON.stringify(item));
                }
                /**
                 * Build `states` list of key/value pairs
                 */
                function loadAll() {
                  var allStates = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\
                          Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\
                          Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\
                          Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\
                          North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\
                          South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\
                          Wisconsin, Wyoming';
                  return allStates.split(/, +/g).map( function (state) {
                    return {
                      value: state.toLowerCase(),
                      display: state
                    };
                  });
                }
                /**
                 * Create filter function for a query string
                 */
                function createFilterFor(query) {
                  var lowercaseQuery = angular.lowercase(query);
                  return function filterFn(state) {
                    return (state.value.indexOf(lowercaseQuery) === 0);
                  };
                }
              }

        </script>
        <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body>
        <div ng-controller="DemoCtrl as ctrl" layout="column" ng-cloak>
          <md-content class="md-padding">
            <form ng-submit="$event.preventDefault()">
              <p>Use <code>md-autocomplete</code> to search for matches from local or remote data sources.</p>
              <md-autocomplete
                  ng-disabled="ctrl.isDisabled"
                  md-no-cache="ctrl.noCache"
                  md-selected-item="ctrl.selectedItem"
                  md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
                  md-search-text="ctrl.searchText"
                  md-selected-item-change="ctrl.selectedItemChange(item)"
                  md-items="item in ctrl.querySearch(ctrl.searchText)"
                  md-item-text="item.display"
                  md-min-length="0"
                  placeholder="What is your favorite US state?">
                <md-item-template>
                  <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span>
                </md-item-template>
                <md-not-found>
                  No states matching "{{ctrl.searchText}}" were found.
                  <a ng-click="ctrl.newState(ctrl.searchText)">Create a new one!</a>
                </md-not-found>
              </md-autocomplete>
              <br/>
              <md-checkbox ng-model="ctrl.simulateQuery">Simulate query for results?</md-checkbox>
              <md-checkbox ng-model="ctrl.noCache">Disable caching of queries?</md-checkbox>
              <md-checkbox ng-model="ctrl.isDisabled">Disable the input?</md-checkbox>
              <p>By default, <code>md-autocomplete</code> will cache results when performing a query.  After the initial call is performed, it will use the cached results to eliminate unnecessary server requests or lookup logic. This can be disabled above.</p>
            </form>
          </md-content>
        </div>

    </body>
</html>

【问题讨论】:

    标签: javascript angularjs angularjs-directive autocomplete angularjs-scope


    【解决方案1】:

    改变这个

    .module('autocompleteDemo', ['ngMaterial'])
    

    到这里

    .module('myapp', ['ngMaterial'])
    

    您指定的名称必须与您在 ng-app(在您的情况下为 myApp)中输入的名称相匹配

    【讨论】:

    • 发现不错,完成了,但结果还是一样,恐怕。让我更新帖子。
    • 您在打开控制台时是否遇到任何错误?如果是这种情况,请更新您的答案
    • 我得到 angular.js:36 Uncaught Error: [$injector:modulerr] errors.angularjs.org/1.2.25/$injector/…...gleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.2.25%2Fangular.min.js%3A18% 3A170)
    【解决方案2】:

    您使用有角度的材料,但您没有导入它。我根据angular material getting started page更新了你的依赖,我创建了一个plunker来验证这一点。

    <!DOCTYPE html>
    <html ng-app="myapp">
        <head>
            <!--[if IE]>
                <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
              <![endif]-->
            <title>Shanid KV | AngularJS Dynamic Form Fields</title>
            <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js"></script>
    
      <!-- Angular Material Library -->
      <script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
    
            <script type="text/javascript">
    
                  angular
                      .module('myapp', ['ngMaterial'])
                      .controller('DemoCtrl', DemoCtrl);
    
                  function DemoCtrl ($timeout, $q, $log) {
                    var self = this;
                    self.simulateQuery = false;
                    self.isDisabled    = false;
                    // list of `state` value/display objects
                    self.states        = loadAll();
                    self.querySearch   = querySearch;
                    self.selectedItemChange = selectedItemChange;
                    self.searchTextChange   = searchTextChange;
                    self.newState = newState;
                    function newState(state) {
                      alert("Sorry! You'll need to create a Constituion for " + state + " first!");
                    }
                    // ******************************
                    // Internal methods
                    // ******************************
                    /**
                     * Search for states... use $timeout to simulate
                     * remote dataservice call.
                     */
                    function querySearch (query) {
                      var results = query ? self.states.filter( createFilterFor(query) ) : self.states,
                          deferred;
                      if (self.simulateQuery) {
                        deferred = $q.defer();
                        $timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
                        return deferred.promise;
                      } else {
                        return results;
                      }
                    }
                    function searchTextChange(text) {
                      $log.info('Text changed to ' + text);
                    }
                    function selectedItemChange(item) {
                      $log.info('Item changed to ' + JSON.stringify(item));
                    }
                    /**
                     * Build `states` list of key/value pairs
                     */
                    function loadAll() {
                      var allStates = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\
                              Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\
                              Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\
                              Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\
                              North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\
                              South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\
                              Wisconsin, Wyoming';
                      return allStates.split(/, +/g).map( function (state) {
                        return {
                          value: state.toLowerCase(),
                          display: state
                        };
                      });
                    }
                    /**
                     * Create filter function for a query string
                     */
                    function createFilterFor(query) {
                      var lowercaseQuery = angular.lowercase(query);
                      return function filterFn(state) {
                        return (state.value.indexOf(lowercaseQuery) === 0);
                      };
                    }
                  }
    
            </script>
            <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
            <link rel="stylesheet" type="text/css" href="style.css">
        </head>
    
        <body>
            <div ng-controller="DemoCtrl as ctrl" layout="column" ng-cloak>
              <md-content class="md-padding">
                <form ng-submit="$event.preventDefault()">
                  <p>Use <code>md-autocomplete</code> to search for matches from local or remote data sources.</p>
                  <md-autocomplete
                      ng-disabled="ctrl.isDisabled"
                      md-no-cache="ctrl.noCache"
                      md-selected-item="ctrl.selectedItem"
                      md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
                      md-search-text="ctrl.searchText"
                      md-selected-item-change="ctrl.selectedItemChange(item)"
                      md-items="item in ctrl.querySearch(ctrl.searchText)"
                      md-item-text="item.display"
                      md-min-length="0"
                      placeholder="What is your favorite US state?">
                    <md-item-template>
                      <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span>
                    </md-item-template>
                    <md-not-found>
                      No states matching "{{ctrl.searchText}}" were found.
                      <a ng-click="ctrl.newState(ctrl.searchText)">Create a new one!</a>
                    </md-not-found>
                  </md-autocomplete>
                  <br/>
                  <md-checkbox ng-model="ctrl.simulateQuery">Simulate query for results?</md-checkbox>
                  <md-checkbox ng-model="ctrl.noCache">Disable caching of queries?</md-checkbox>
                  <md-checkbox ng-model="ctrl.isDisabled">Disable the input?</md-checkbox>
                  <p>By default, <code>md-autocomplete</code> will cache results when performing a query.  After the initial call is performed, it will use the cached results to eliminate unnecessary server requests or lookup logic. This can be disabled above.</p>
                </form>
              </md-content>
            </div>
    
        </body>
    </html>
    

    【讨论】:

    • 唯一似乎不起作用的是函数 newState,单击链接时我从来没有收到 alert()。你能找出原因吗?
    • 我认为这是因为md-not-found 项目获得了点击,但它没有进入链接。
    • 你知道如何解决这个问题吗?
    【解决方案3】:

    您似乎错过了添加ngMaterial.js 的引用,您需要在您的angular.min.js 文件文件引用之后添加它。从 this cdn 获取它,同时添加 CSS 以获取样式。

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2017-04-10
      • 2018-06-25
      • 2015-11-16
      • 2017-01-20
      相关资源
      最近更新 更多