我有一个简单的AngularJS应用程序,它有两个模板页面:login.html和content.html。
我使用ng-view
和路由来动态地将这些页面加载到index.html。
工作正常。
这是我的index.html:
<!DOCTYPE html>
<html ng-app="testApp">
<head>
<title>Test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.4/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.4/angular-route.js"></script>
<script src="app.js"></script>
</head>
<body>
<h1>Test Page</h1>
<div ng-view></div>
</body>
</html>
而且,这是我的login.html:
<div>
<input type="text" name="username" id="username">
<input type="password" name="password" id="password">
<button ng-click="doLogin()">Submit</button>
</div>
以下是content.html:
<div>
<button ng-click="alertPassword()">Click Me!</button>
</div>
而且,这是我的app.js:
var app = angular.module('testApp', ['ngRoute'])
.config(function($routeProvider, $locationProvider) {
$locationProvider.html5Mode(false);
$routeProvider
.when('/', {
redirectTo: '/login'
})
.when('/login', {
templateUrl: 'login.html',
controller: 'loginController'
})
.when('/content', {
templateUrl: 'content.html',
controller: 'contentController'
})
.otherwise({
redirectTo: '/'
})
})
.controller('loginController', function($scope, $rootScope, $location){
$scope.doLogin = function (password) {
$rootScope.password = password;
$location.path('/content');
}
})
.controller('contentController', function($scope, $rootScope){
var password = $rootScope.password;
$scope.alertPassword = function () {
alert(password);
}
})
一切正常,但内容页面上$rootScope.password
的值未定义。
因此,当我点击Click Me!
按钮时,我希望得到我在登录页面输入的密码的值,但是我得到了未定义的&#39;,
注意:我尝试在stackoverflow上搜索其他答案,但无法找到问题的答案。
答案 0 :(得分:3)
这是因为,在您的login.html
中,您在没有任何参数的情况下致电doLogin
:
<button ng-click="doLogin()">Submit</button>
但是,您的功能需要一个参数:
$scope.doLogin = function (password) {
$rootScope.password = password;
$location.path('/content');
}
因此,password
的{{1}}属性仍未定义。
在$rootScope
:
login.html
我在您的密码输入中添加了<div>
<input type="text" name="username" id="username">
<input type="password" name="password" id="password" ng-model="password">
<button ng-click="doLogin(password)">Submit</button>
</div>
属性,该属性将输入值绑定到名为ng-model
的范围变量。然后,点击后,此变量将传递给password
。
答案 1 :(得分:0)
您未在doLogin()
函数
尝试这样: HTML
<div>
<input type="text" name="username" id="username">
<input type="password" ng-model="password" name="password" id="password">
<button ng-click="doLogin(password)">Submit</button>
</div>
在控制器中
.controller('loginController', function($scope, $rootScope, $location){
$scope.password = "";
$scope.doLogin = function (password) {
$rootScope.password = password;
$location.path('/content');
}
})
答案 2 :(得分:0)
试试这样:
.controller('loginController', function($scope, $rootScope, $location){
var password = $rootScope.password; ///// <---
$scope.doLogin = function (password) {
$rootScope.password = password;
$location.path('/content');
}
})
.controller('contentController', function($scope, $rootScope){
var password = $rootScope.password;
$scope.alertPassword = function ( ---> password ) {
alert(password);
}
})
在你的HTML中:
"doLogin(password)" // <--- add password as a parameter.