gpt4 book ai didi

angularjs - 有没有像 Angular 初始化模块一次之类的东西?

转载 作者:行者123 更新时间:2023-12-02 22:43:21 25 4
gpt4 key购买 nike

我可以在 Angular 模块中加载一些数据吗?我尝试使用 .run() 但每当访问页面时它都会被调用。例如:假设有 2 个 html 页面属于同一模块:

TestPage1.html:
<html ng-app="myApp">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="js/angular.min.js"></script>
<script src="js/jquery-1.8.2.js"></script>
<script src="js/app.js"></script>
</head>
<body>
<p><a ng-href="TestPage2.html">Go to Page2</a></p>
</body>
</html>

TestPage2.html:
<html ng-app="myApp">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="js/angular.min.js"></script>
<script src="js/jquery-1.8.2.js"></script>
<script src="js/app.js"></script>
</head>
<body>
<p><a ng-href="TestPage1.html">Go to Page1</a></p>
</body>
</html>

app.js:
var myApp = angular.module('myApp', []);
var cnt = 0;
myApp.run(['$rootScope', '$http', function(scope, $http) {
if(scope.loggedIn == undefined || scope.loggedIn == null) {
$http.get('rest/userData').success(function(data) {
cnt++;
alert(cnt);
scope.loggedIn = true;
});
}
}]);

当我从一个页面导航到另一个页面时,这个 .run() 会被一次又一次地调用,cnt 为 1。是否有可能在模块初始化的生命周期中调用它一次?或者还有什么其他方法?

最佳答案

您似乎缺少一些基础知识,例如 Controller 。典型的 Angular 设置是为您的应用程序提供一个 ng-view 并通过路由加载其他页面。这是一个简单的例子:

http://beta.plnkr.co/edit/RnZWeWxTJFri49Bvw50v?p=preview

app.js

var app = angular.module('myApp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/view1', {templateUrl: 'TestPage1.html', controller: Page1Ctrl});
$routeProvider.when('/view2', {templateUrl: 'TestPage2.html', controller: Page2Ctrl});

$routeProvider.otherwise({redirectTo: '/view1'});
}]).run(function () { // instance-injector

alert('only run on first page load this is where you load data or whatever ONE time'); // this only runs ONE time
})

function MainCtrl($scope) {
$scope.name = 'main';
}

function Page1Ctrl($scope) {
$scope.name = 'page 1';
}

function Page2Ctrl($scope) {
$scope.name = 'page 2';
}

HTML:

<html ng-app="myApp" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<link rel="stylesheet" href="style.css">
<script>document.write("<base href=\"" + document.location + "\" />");</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
This is the main page. Main nav:

<a ng-href="#/view1">Go to Page1</a>&nbsp;&nbsp;
<a ng-href="#/view2">Go to Page2</a>
<div ng-view></div>
</body>
</html>

您会注意到 html 中有一个 ng-view,当遇到诸如 #/view 之类的路由时,routeprovider 会查找它并提供正确的模板并调用适当的 Controller 。我相信这就是您想要实现的设置。

关于angularjs - 有没有像 Angular 初始化模块一次之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16213966/

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