gpt4 book ai didi

javascript - 使用 Angular 服务在 ng-view 页面之间共享数据

转载 作者:行者123 更新时间:2023-12-02 14:28:32 28 4
gpt4 key购买 nike

我正在尝试使用 Angular 构建一个单页 Web 应用程序。

我有以下 3 个文件:script.js、index.html 和 about.html。

我希望 about.html 使用一项服务,以便使用 Angular 服务更改共享值(到所有其他页面,即 contact.html)。

我希望此服务有一个可以通过所有页面访问的值(消息),一旦一个页面更改此值,所有其他页面都会知道这个新值...

由于某种原因,下面的代码不起作用......

为什么?

脚本.js

var scotchApp = angular.module('scotchApp', ['ngRoute']);
scotchApp.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl : 'pages/home.html',
controller : 'SharedController'
})
.when('/about', {
templateUrl : 'pages/about.html',
controller : 'SharedController'
})
.when('/contact', {
templateUrl : 'pages/contact.html',
controller : 'SharedController'
});
});

scotchApp.factory('myService', function() {
var savedData = {}
function set(data) {
savedData = data;
}
function get() {
return savedData;
}

return {
set: set,
get: get
}

});

scotchApp.controller('SharedController', ['$scope', 'myService', function($scope, myService) {
myService.set('hello');
$scope.message = myService.get();
}]);

index.html

 <!DOCTYPE html>
<html>
<head>

<script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9">
</script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular-route.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js"></script>
<script src="script.js"></script>
</head>
<body>

<ul>
<li><a href="#"><i class="fa fa-home"></i> Home</a></li>
<li><a href="#about"><i class="fa fa-shield"></i> About</a></li>
<li><a href="#contact"><i class="fa fa-comment"></i> Contact</a></li>
</ul>

<div ng-app="scotchApp" ng-view>
</div>

</body>
</html>

和about.html

<div class="jumbotron text-center">
<h1>old value</h1>
<script type="text/javascript">
myService.set('hello');
$scope.message = myService.get();
</script>
<p>{{ message }}</p>
</div>

最佳答案

编辑1:据我所知,您无法直接从 View 中使用服务。你必须通过 Controller 。当您希望用户通过 ng click 选择一个值时,我会执行以下操作:

about.html:

<div class="jumbotron text-center">
<h1>old value</h1>
<p>{{ message }}</p>
<button type="button" ng-click="updateMsg('I am in about')">Click Me</button>
</div>

Controller :

scotchApp.controller('AboutController', ['$scope', '$routeParams', 'myService',
function($scope, myService) {


$scope.updateMsg = function (msg) {
myService.set(msg);
$scope.message = myService.get();
}

}]);

原文:

我建议为每个页面制作不同的 Controller 。但是,您应该注意的一件事是,about.html 中的 JavaScript 无法工作,它正在访问 myService,因为 Angular 不知道/注入(inject)服务。你本来可以做的是:

scotchApp.controller('AboutController', ['$scope', '$routeParams', 'myService',
function($scope, myService) {

myService.set('About');
$scope.message = myService.get();

}]);

您的路线将更改为:

.when('/about', {
templateUrl : 'pages/about.html',
controller : 'AboutController'
})

和about.html:

<div class="jumbotron text-center">
<h1>old value</h1>
<p>{{ message }}</p>
</div>

关于javascript - 使用 Angular 服务在 ng-view 页面之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032791/

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