Plnkr链接https://plnkr.co/edit/6dLIk1vq6M1Dsgy8Y4Zk?p=preview
在登录之后,选择Ticker应该将该股票代码对象发送到Tags状态。然后,这将启动Tags状态,代码将检查已选择/传入哪个股票代码,然后显示相应的标签列表。
选择自动收报机不会更新标签状态也不会执行任何操作。
请注意,在下面的屏幕截图中,单击Ticker按钮后没有组件或状态日志:
$scope.clickTicker = function(ticker) {
console.log(' Ticker clicked!', $state)
$state.go('tags', { ticker: ticker });
}
和
$scope.clickTicker = function(ticker) {
console.log(' Ticker clicked!', $state)
$state.go('tickers.tags', { ticker: ticker });
}
// Tickers module
////////////////////////////////////////////////////////////////////////////////
var tickers = angular.module('tickers', ['ui.router'])
tickers.config(function($stateProvider) {
const tickers = {
parent: 'dashboard',
name: 'tickers',
url: '/tickers',
params: {
ticker: {}
},
views: {
'': {
templateUrl: 'tickers-template.html',
controller: function($scope, $state) {
console.log('TICKERS view $state');
$scope.tickers = [
{ id: 1, ticker: 'AAPL' },
{ id: 2, ticker: 'GOOG' },
{ id: 3, ticker: 'TWTR' }
];
$scope.clickTicker = function(ticker) {
console.log('ticker', ticker)
$state.go('tags', { ticker: ticker });
}
}
},
'tags@tickers': {
templateUrl: 'tags-template.html',
controller: function($scope) {
console.log('TAGS view $state');
}
}
}
}
$stateProvider.state(tickers);
})
tickers.component('tickersModule', {
templateUrl: 'tickers-template.html',
controller: function($scope, $state) {
console.log('TICKERS component');
$scope.tickers = [
{ id: 1, ticker: 'AAPL' },
{ id: 2, ticker: 'GOOG' },
{ id: 3, ticker: 'TWTR' }
];
$scope.clickTicker = function(ticker) {
console.log(' Ticker clicked!', $state)
$state.go('tags', { ticker: ticker });
}
}
});
<div class="tickers-state">
<div class="fl w100">
<em>Tickers state</em>
</div>
<div class="tickers-panel">
<div class="tickers-list">
<ul>
<li ng-repeat="ticker in tickers" class="fl">
<button ng-click="clickTicker(ticker)">{{ ticker.ticker }}</button>
</li>
</ul>
</div>
</div>
<tags-module class="fl"></tags-module>
</div>
// Tags module
////////////////////////////////////////////////////////////////////////////////
var tags = angular.module('tags', ['ui.router'])
tags.config(function($stateProvider) {
const tags = {
name: 'tags',
url: '/tags',
params: {
ticker: {},
tag: {}
},
parent: 'tickers',
views: {
'': {
templateUrl: 'tags-template.html',
controller: function($scope, $state) {
console.log('Tags view $state', $state.params);
const tags_model = [
{
ticker: 'AAPL',
tags : [{ id: 1, term: 'iPhone 7' }, { id: 2, term: 'iPhone 8' }, { id: 3, term: 'Tim Cook' }]
},
{
ticker: 'GOOG',
tags : [{ id: 4, term: 'Pixel' }, { id: 5, term: 'Pixel XL' }, { id: 6, term: 'Chrome Book' }]
},
{
ticker: 'TWTR',
tags : [{ id: 7, term: 'tweet' }, { id: 8, term: 'retweet' }, { id: 9, term: 'moments' }]
}
];
function matchTags(ticker, model) {
return model.filter(function(obj){
if (obj.ticker === ticker) { return obj; }
});
}
$scope.tags_model = matchTags($state.params.ticker.ticker, tags_model)[0];
$scope.clickTag = function(tag) {
$state.go('tags', { tag: tag });
}
console.log('Tags init', $state.params);
}
},
'view@tags': {
templateUrl: 'view-template.html',
controller: function($scope, $state) {
console.log('VIEWS view $state');
$scope.term = $state.params.tag.term;
}
},
'chart@tags': {
templateUrl: 'chart-template.html',
controller: function($scope, $state) {
console.log('CHART view $state');
$scope.term = $state.params.tag.term;
}
},
'social@tags': {
templateUrl: 'social-template.html',
controller: function($scope, $state) {
console.log('SOCIAL view $state');
$scope.term = $state.params.tag.term;
}
}
}
}
$stateProvider.state(tags);
})
tags.component('tagsModule', {
templateUrl: 'tags-template.html',
controller: function($scope, $state) {
console.log('TAGS component', $state.params);
}
});
答案 0 :(得分:0)
<强> https://plnkr.co/edit/CFbkPAlL2kVMSM3G4q5T?p=preview 强>
我终于正确设置了子状态,并使用了正确命名的视图:
// Container module
////////////////////////////////////////////////////////////////////////////////
var container = angular.module('container', [ 'ui.router' ])
container.config(function($stateProvider) {
const container = {
name: 'container',
url: '/container',
templateUrl: 'container-template.html',
controller: function($scope, $state) {
console.log('CONTAINER STATE');
// $state.go('dashboard', {});
}
}
const dashboard = {
name: 'container.dashboard',
// deepStateRedirect: true,
// sticky: true,
views: {
'dashboard': {
template: '<dashboard-module></dashboard-module>'
},
'feed': {
templateUrl: 'feed-template.html',
controller: function($scope) {
console.log('FEED STATE');
}
}
}
}
$stateProvider
.state(container)
.state(dashboard);
});
// Dashboard module
////////////////////////////////////////////////////////////////////////////////
var dashboard = angular.module('dashboard', [ 'ui.router' ])
dashboard.config(function($stateProvider) {
const dash_default = {
name: 'container.dashboard.default',
url: '/dashboard',
template: '<tickers-module></tickers-module>',
controller: function() {
console.log(' DASHBOARD.DEFAULT STATE')
}
}
$stateProvider.state(dash_default);
})
dashboard.component('dashboardModule', {
templateUrl: 'dashboard-template.html',
controller: function($scope, $state) {
console.log('DASHBOARD component');
}
});
// Tickers module
////////////////////////////////////////////////////////////////////////////////
var tickers = angular.module('tickers', ['ui.router'])
tickers.config(function($stateProvider) {
const tickers = {
// parent: 'dashboard',
name: 'container.dashboard.tickers',
url: '/tickers',
params: {
ticker: {}
},
views: {
'': {
templateUrl: 'tickers-template.html',
controller: function($scope, $state) {
console.log(' TICKERS STATE', $state);
$scope.tickers = [
{ id: 1, ticker: 'AAPL' },
{ id: 2, ticker: 'GOOG' },
{ id: 3, ticker: 'TWTR' }
];
// $state.go('tags', { ticker: $scope.tickers[0] });
$scope.clickTicker = function(ticker) {
console.log(' >>> ticker view state', ticker)
$state.go('container.dashboard.tickers.tagslist', { ticker: ticker });
}
}
}
}
}
$stateProvider.state(tickers);
})
tickers.component('tickersModule', {
templateUrl: 'tickers-template.html',
controller: function($scope, $state) {
console.log('TICKERS component');
// $scope.tickers = [
// { id: 1, ticker: 'AAPL' },
// { id: 2, ticker: 'GOOG' },
// { id: 3, ticker: 'TWTR' }
// ];
// $scope.clickTicker = function(ticker) {
// console.log(' Ticker clicked!', $state)
// $state.go('tags.list', { ticker: ticker });
// }
}
});
// Tags module
////////////////////////////////////////////////////////////////////////////////
var tags = angular.module('tags', ['ui.router'])
tags.config(function($stateProvider) {
const oldtags = {
name: 'tags',
url: '/tags',
params: {
ticker: {},
tag: {}
},
// parent: 'tickers',
views: {
'': {
templateUrl: 'tags-template.html',
controller: function($scope, $state) {
console.log('Tags view $state', $state.params);
const tags_model = [
{
ticker: 'AAPL',
tags : [{ id: 1, term: 'iPhone 7' }, { id: 2, term: 'iPhone 8' }, { id: 3, term: 'Tim Cook' }]
},
{
ticker: 'GOOG',
tags : [{ id: 4, term: 'Pixel' }, { id: 5, term: 'Pixel XL' }, { id: 6, term: 'Chrome Book' }]
},
{
ticker: 'TWTR',
tags : [{ id: 7, term: 'tweet' }, { id: 8, term: 'retweet' }, { id: 9, term: 'moments' }]
}
];
function matchTags(ticker, model) {
return model.filter(function(obj){
if (obj.ticker === ticker) { return obj; }
});
}
$scope.tags_model = matchTags($state.params.ticker.ticker, tags_model)[0];
console.log(' $scope.tags_model', $scope.tags_model)
$scope.clickTag = function(tag) {
$state.go('tags', { tag: tag });
}
console.log('Tags init', $state.params);
}
},
'list@tags': {
},
'view@tags': {
template: '<view-module ticker="$ctrl.ticker"></view-module>',
controller: function($scope, $state) {
console.log('VIEWS view $state');
$scope.term = $state.params.tag.term;
}
},
'chart@tags': {
templateUrl: 'chart-template.html',
controller: function($scope, $state) {
console.log('CHART view $state');
$scope.term = $state.params.tag.term;
}
},
'social@tags': {
templateUrl: 'social-template.html',
controller: function($scope, $state) {
console.log('SOCIAL view $state');
$scope.term = $state.params.tag.term;
}
}
}
}
const tags = {
name: 'container.dashboard.tickers.tagslist',
url: '/tags',
params: {
ticker: {}
},
views: {
'tags' : {
templateUrl: 'tags-list.html',
controller: function($scope, $state) {
console.log(' tags-list controller', $state)
$scope.ticker = $state.params.ticker;
const tags_model = [
{
ticker: 'AAPL',
tags : [{ id: 1, term: 'iPhone 7' }, { id: 2, term: 'iPhone 8' }, { id: 3, term: 'Tim Cook' }]
},
{
ticker: 'GOOG',
tags : [{ id: 4, term: 'Pixel' }, { id: 5, term: 'Pixel XL' }, { id: 6, term: 'Chrome Book' }]
},
{
ticker: 'TWTR',
tags : [{ id: 7, term: 'tweet' }, { id: 8, term: 'retweet' }, { id: 9, term: 'moments' }]
}
];
function matchTags(ticker, model) {
return model.filter(function(obj){
if (obj.ticker === ticker) { return obj; }
});
}
$scope.tags_model = matchTags($state.params.ticker.ticker, tags_model)[0];
console.log(' $scope.tags_model', $scope.tags_model)
$scope.clickTag = function(tag) {
$state.go('tags', { tag: tag });
}
}
},
'view@tags': {
template: '<view-module ticker="$ctrl.ticker"></view-module>',
controller: function($scope, $state) {
console.log('VIEWS view $state');
$scope.term = $state.params.tag.term;
}
}
}
}
$stateProvider
.state(tags);
// .state(tagslist);
})
tags.component('tagsModule', {
templateUrl: 'tags-template.html',
controller: function($scope, $state) {
console.log('TAGS component', $state.params);
}
});
// ViewHeader module
////////////////////////////////////////////////////////////////////////////////
var view = angular.module('view', ['ui.router'])
view.component('viewModule', {
templateUrl: 'view-template.html',
bindings: {
ticker: '<'
},
controller: function($scope, $state) {
console.log('VIEW component', $state.params);
$scope.ticker = this.ticker;
$scope.term = $state.params.tag.term;
}
});
// Chart module
////////////////////////////////////////////////////////////////////////////////
var chart = angular.module('chart', ['ui.router'])
chart.component('chartModule', {
templateUrl: 'chart-template.html',
controller: function($scope, $state) {
console.log('CHART component', $state.params);
$scope.term = $state.params.tag.term;
}
});
// Social module
////////////////////////////////////////////////////////////////////////////////
var social = angular.module('social', ['ui.router'])
social.component('socialModule', {
templateUrl: 'social-template.html',
controller: function($scope, $state) {
console.log('SOCIAL component', $state.params);
$scope.term = $state.params.tag.term;
}
});
// TickersApp module
////////////////////////////////////////////////////////////////////////////////
var tickersApp = angular.module('tickersApp',
['ui.router',
'container',
'dashboard',
'tickers',
'tags',
'view',
'chart',
'social']);
tickersApp.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/login');
const login = {
name: 'login',
url: '/login',
templateUrl: 'login-template.html',
bindToController: true,
controllerAs: 'l',
controller: function($state) {
this.login = function() {
$state.go('container.dashboard.tickers', { });
}
}
}
$stateProvider
.state(login);
})
.run(['$rootScope', '$location', '$state',
function($rootScope, $location, $state) {
// $rootScope.$on("$stateChangeError", console.log.bind(console));
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams, options) {
// console.log(' ')
// console.log('toState', toState)
// console.log('state.current.name', $state.current.name)
// console.log('toParams', toParams)
// console.log('fromState', fromState)
// console.log('fromParams', fromParams)
// console.log('options', options)
});
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams){
console.log('state.current.name', $state.current.name)
})
$rootScope.$on('$stateChangeError',
function(event, toState, toParams, fromState, fromParams, error){
console.error('ERROR toState', toState)
console.error('ERROR fromState', fromState)
});
$rootScope.$on('$stateNotFound',
function(event, unfoundState, fromState, fromParams){
console.log('unfoundState.to', unfoundState.to); // "lazy.state"
// console.log('unfoundState.toParams', unfoundState.toParams); // {a:1, b:2}
// console.log('unfoundState.options', unfoundState.options); // {inherit:false} + default options
});
$rootScope.$on('$viewContentLoaded',
function(event){
// console.log('viewContentLoaded', event)
});
}]);