AngularJs - 模块已定义但仍然出现 "not available" 错误
AngularJs - Module defined but still gets "not available" error
我正在尝试使用 angular directive
构建密码匹配机制,但似乎遗漏了什么。我定义了 ng-app
和 ng-controller
,但我仍然收到一条错误消息,指出 module
未定义。
Jsfiddle here.
Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
HTML:
<div ng-app="myApp">
<div class="row" ng-controller='Ctrl'>
<form name="form1">
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="form-group">
<input type="password" ng-model="login.password" name="password" id="password" class="form-control input-lg" placeholder="Password" tabindex="5">
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="form-group">
<input ng-model="login.verify" type="password" name="verify" placeholder="Confirm Password" nx-equal="login.password" class="form-control input-lg" tabindex="6">
<div class="error" ng-show="form1.verify.$error.nxEqual">Passwords are not equal</div>
</div>
</div>
</form>
</div>
</div>
JS:
var app = angular.module("myApp", []);
app.controller("Ctrl", function($scope){
});
app.directive('nxEqual', function() {
return {
require: 'ngModel',
link: function(scope, elem, attrs, model) {
if (!attrs.nxEqual) {
console.error('nxEqual expects a model as an argument!');
return;
}
scope.$watch(attrs.nxEqual, function(value) {
model.$setValidity('nxEqual', value === model.$viewValue);
});
model.$parsers.push(function(value) {
var isValid = value === scope.$eval(attrs.nxEqual);
model.$setValidity('nxEqual', isValid);
return isValid ? value : undefined;
});
}
};
});
您在错误的时间加载库脚本。在您的 JSFiddle 示例中,将 onLoad
更改为 No Wrap - in <head>
(用于阻止)或 No Wrap - in <body>
。这将确保 Angular 已正确加载,我们可以编写 我们的 代码。
JSFiddle Link - 已更新 fiddle
查看 this answer: When do you put Javascript in body, when in head and when use doc.load? [duplicate],我发现它在外部库脚本加载位置上非常简单。展望未来,这将成为常态,至少在制作 JSFiddle 示例时是这样。
我正在尝试使用 angular directive
构建密码匹配机制,但似乎遗漏了什么。我定义了 ng-app
和 ng-controller
,但我仍然收到一条错误消息,指出 module
未定义。
Jsfiddle here.
Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
HTML:
<div ng-app="myApp">
<div class="row" ng-controller='Ctrl'>
<form name="form1">
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="form-group">
<input type="password" ng-model="login.password" name="password" id="password" class="form-control input-lg" placeholder="Password" tabindex="5">
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="form-group">
<input ng-model="login.verify" type="password" name="verify" placeholder="Confirm Password" nx-equal="login.password" class="form-control input-lg" tabindex="6">
<div class="error" ng-show="form1.verify.$error.nxEqual">Passwords are not equal</div>
</div>
</div>
</form>
</div>
</div>
JS:
var app = angular.module("myApp", []);
app.controller("Ctrl", function($scope){
});
app.directive('nxEqual', function() {
return {
require: 'ngModel',
link: function(scope, elem, attrs, model) {
if (!attrs.nxEqual) {
console.error('nxEqual expects a model as an argument!');
return;
}
scope.$watch(attrs.nxEqual, function(value) {
model.$setValidity('nxEqual', value === model.$viewValue);
});
model.$parsers.push(function(value) {
var isValid = value === scope.$eval(attrs.nxEqual);
model.$setValidity('nxEqual', isValid);
return isValid ? value : undefined;
});
}
};
});
您在错误的时间加载库脚本。在您的 JSFiddle 示例中,将 onLoad
更改为 No Wrap - in <head>
(用于阻止)或 No Wrap - in <body>
。这将确保 Angular 已正确加载,我们可以编写 我们的 代码。
JSFiddle Link - 已更新 fiddle
查看 this answer: When do you put Javascript in body, when in head and when use doc.load? [duplicate],我发现它在外部库脚本加载位置上非常简单。展望未来,这将成为常态,至少在制作 JSFiddle 示例时是这样。