gpt4 book ai didi

javascript - url 更改后 Angular 无法加载 View

转载 作者:行者123 更新时间:2023-11-28 04:59:10 25 4
gpt4 key购买 nike

我正在尝试学习 angularjs。我不想在两个不同页面的两个 Controller 之间共享数据。经过谷歌搜索后了解了服务并创建了一项服务。从一页我可以调用我的休息服务并获取数据。在我尝试重定向到不同的页面之后。 URL 正在更改,但页面未加载。卡在这里。请找到下面的代码。有人可以帮我解决我做错的地方吗?

数据.html

<!DOCTYPE html>
<html>
<head>
<base href="/">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js"> </script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular-route.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular-resource.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular-resource.min.js"></script>


<script src="app.js"></script>
<script src="usercontroller.js"></script>
<script src="userservice.js"></script>

</head>

<body ng-app="myApp">

<div ng-controller="UserController" >
<form>
<input type="text" name="Name" ng-model="user.userName"> Name <br/>
<input type="text" name="password" ng-model="user.password"> Password <br/>
<button type="submit" ng-click="getUser(user)" >Submit</button>
</form>

数据2.html

<!DOCTYPE html>
<html>
<head>
<base href="/">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js"> </script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular-route.js"></script>
<script src="app.js"></script>
<script src="usercontroller.js"></script>
<script src="userservice.js"></script>

</head>

<body>
<div ng-controller="UserController2" >
<form>
<input type="text" name="Name" ng-model="user.userName"> Name <br/>
<input type="text" name="password" ng-model="user.password"> Password <br/>
<button type="submit" ng-click="shareUser()" >Submit</button>
</form>
</div>

app.js


var App = angular.module('myApp',['ngRoute','ngResource']);


App.config(['$routeProvider',
function (
$routeProvider
) {
$routeProvider.
when('/home', {
templateUrl: 'data.html',
controller: 'UserController'
}).
when('/welcome', {
templateUrl: '/data2.html',
controller: 'UserController2'
}).
otherwise({
redirectTo: '/home'
});
}]);

usercontroller.js


App.controller('UserController', ['$scope', 'UserService', '$window', function($scope, UserService,$window,$location) {
alert("inside user controller");
var self = this;
$scope.user={};
$scope.user.userName="murali";
$scope.user.password="murali123";

$scope.getUser = function(user){
alert("inside function");
UserService.getUser(user).then(function(data){
alert("data::"+JSON.stringify(data.userName));
$window.location.href ='/welcome';
});
};

}]);

App.controller('UserController2', ['$scope', 'UserService', function($scope, UserService) {
alert("inside user controller");

$scope.user={};


$scope.findUser = function(){
alert("inside function");
$scope.user = UserService.findUser();
alert("userName::"+$scope.user.userName);

};

}]);

userservice.js

App.factory('UserService', ['$http', '$q', function($http, $q){
var user = {};
return {

getUser : function(user){
return $http.post('http://localhost:8080/user/login', angular.toJson(user))
.then(
function(response){
alert(JSON.stringify(response.data));
user=response.data;
return response.data;
},
function(errResponse){
console.error('Error while getting response');
return $q.reject(errResponse);
}
);
},


shareUser : function(){
return user;
}


};
}]);

最佳答案

如果重定向整个页面重新加载并且服务从0开始创建,则不会保存任何数据,除非将其存储在cookie中或local/session storage 。但我看到你正在使用 angular-route ,所以,你仍然可以完成它。

首先,当使用angular-route时, View 不需要是完整的 html 文档,而只是其中的一部分。示例:

index.html

<!DOCTYPE html>
<html>
<head>
<base href="/">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js"> </script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular-route.js"></script>
<script src="app.js"></script>
<script src="usercontroller.js"></script>
<script src="userservice.js"></script>
</head>

<body>
<div ng-app="myApp">
<ng-view></ng-view> <!-- Required by angular-route -->
</div>
</body>
</html>

请注意<ng-view></ng-view>元素,angular-route 需要它并且是加载 View 的位置。

data.html

<form>
<input type="text" name="Name" ng-model="user.userName"> Name <br/>
<input type="text" name="password" ng-model="user.password"> Password <br/>
<button type="submit" ng-click="getUser(user)" >Submit</button>
</form>

data2.html

<form>
<input type="text" name="Name" ng-model="user.userName"> Name <br/>
<input type="text" name="password" ng-model="user.password"> Password <br/>
<button type="submit" ng-click="findUser()" >Submit</button>
</form>

请注意,在 data2.html 中我变了ng-click="shareUser()"ng-click="findUser()"UserController2没有 shareUser功能。

现在,在 UserController而不是使用window.location.href ='/welcome';使用$location.path('/welcome'); ,这是您需要用来导航而无需重新加载整个页面的内容,angular-route会发挥魔法的。您需要添加$location服务作为依赖项。

UserController2 ,更改UserService.findUser();UserService.shareUser();因为UserService没有 findUser功能,我认为 shareUser是您正在尝试使用的。

另外,再看看 $routeProvider配置,'/data2.html'可能指向错误的位置。

你已经准备好了,重新加载页面并愉快地编码。

关于javascript - url 更改后 Angular 无法加载 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com