我正在使用Angularjs 1.4.2和ui-router进行一些重构,而且我不确定适当的架构应该用于改变。
目前,我们正在使用$ state.go(" main");呼叫主要路线 以及所有后续路由,它们是具有html页面,控制器和服务的独立组件。我认为这是因为只有主要内容是动态的。
标题部分被硬编码到index.html页面中,因为我猜这是一个快速修复。所有页面的标题内容都必须相同。
我尝试做的是将index.html中的标头html代码分成两个不同的标题页,这些标题页使用新的headerController并将其与现有的app结构合并,除非这是错误的建筑。我有一个简单的plunker尝试让它独立工作, 但是当我点击按钮时,它什么也没做。
所以我有两个问题,具有两个不同标题的应用程序的正确ui-router结构是什么,以后可能会增加一两个? 我假设我想为此使用两种不同的状态,而不是使用url路由,但我可以使用其中任何一种。
第二个问题是:为什么我的plunker没有工作?
app.js
var myApp = angular.module('myApp', ['ui.router']);
myApp.config(function($stateProvider, $urlRouterProvider) {
document.write("In config!");
$stateProvider
.state('headerA', {
url: "/headerA",
templateUrl: "headerA.html",
controller: "headerController"
})
.state('headerB', {
url: "headerB",
templateUrl: "headerB.html",
controller: "headerController"
})
});
myApp.controller('headerController', function($scope) {
document.write("In config!");
$scope.messageA = 'This is headerA!';
$scope.messageB = 'This is headerB!';
})
headerA.html
<div>
{{messageA}}
</div>
headerB.html
<div>
{{messageB}}
</div>
的index.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<link data-require="bootstrap-css@4.0.0-alpha.2" data-semver="4.0.0-alpha.2" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular.js" data-semver="1.5.2" data-require="angular.js.1.3@*"></script>
<script src="http://angular-ui.github.io/ui-router/release/angular-ui-router.js">
<link rel="stylesheet" href="style.css" />
<script src="app.js"></script>
</head>
<!-- define angular controller -->
<body ng-controller="headerController">
<p></p>
<div ui-view=""></div>
<p></p>
<p></p>
<a class="btn btn-primary" ui-sref="headerA">headerA</a>
<p></p>
<a class="btn btn-danger" ui-sref="headerB">headerB</a>
</body>
</html>
答案 0 :(得分:1)
我最终在Codepen中重新创建了这个。无论出于何种原因,我都无法让Plunkr和JSFiddle正常工作。
UI路由器允许您在每种状态下设置多个视图。你只需要:
就像<div ui-view="header">
$stateProvider.state( name, {
views:{
header: { ... }
main: { ... }
}
})