AngularJS - $injector:modulerr 模块错误在 angular.js:36.

AngularJS - $injector:modulerr Module Error in angular.js:36

本文关键字:angular js 错误 modulerr injector AngularJS 模块      更新时间:2023-09-26

首先,我真的希望大家的理解和宽容。这个问题很具体,所以请不要再激进/投反对票/搁置。我们都在这里学习新东西并分享知识,而不是侵略。非常感谢。

问题:我正在尝试遵循此示例,但这似乎在Chrome中没有显示任何内容。该链接显示了预期内容。我得到的只是浏览器中的空白页。谁能确切地说出为什么?

    <!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>

更改此内容

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

对此

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

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

您使用角度材质,但不导入它。我根据角度材料入门页面更新了您的依赖项,我创建了一个 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>

似乎您错过了添加ngMaterial.js的引用,您需要在angular.min.js文件文件引用之后立即添加它。从这个 cdn 中获取它,也添加 CSS 以获得工作中的样式。