https://plnkr.co/edit/zfmuZXp88cSbdOsibv3y?p=preview
我有一个主dashboard
个父州,有两个子州tags
和tickers
。
当我点击tickers
中的按钮时,只有tags
状态应该刷新。目前他们都刷新了。
^ onInit tickersController
console.log应该只运行一次。但是,每次单击自动收报机时都应运行tagsController。
var routerApp = angular.module('routerApp', ['ui.router']);
routerApp.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/dash');
var dash = {
name: 'dash',
url: '/dash?ticker',
params: {
ticker: 'AAA'
},
views: {
'': { templateUrl: 'dashboard.html' },
'tagsList@dash': {
url: '/tags',
templateUrl: 'tags-list.html',
controller: 'tagsController'
},
'tickersList@dash': {
url: '/tickers',
templateUrl: 'tickers-list.html',
controller: 'tickersController'
},
'alertsList@dash': {
url: '/alerts',
templateUrl: 'alerts-list.html',
controller: 'alertsController'
}
}
};
$stateProvider
.state(dash);
});
routerApp.controller('tagsController', function($scope, $state) {
$scope.ticker = $state.params.ticker;
function getList(ticker) {
switch(ticker) {
case 'AAA' : return ['aaa tag 1', 'aaa tag 2', 'aaa tag 3'];
case 'BBB' : return ['bbb tag 1', 'bbb tag 2', 'bbb tag 3'];
case 'CCC' : return ['ccc tag 1', 'ccc tag 2', 'ccc tag 3'];
}
}
$scope.tags = getList($state.params.ticker);
this.$onInit = function() {
console.log('onInit tagsController');
};
});
routerApp.controller('tickersController', function($scope, $state) {
$scope.changeScotchState = function(theTicker) {
$state.go('dash', { ticker: theTicker });
};
$scope.tickers = [
'AAA', 'BBB', 'CCC'
];
this.$onInit = function() {
console.log('onInit tickersController', $state.params.ticker);
};
});
routerApp.controller('alertsController', function($scope, $state) {
this.$onInit = function() {
console.log('onInit alertsController', $state.params.ticker);
};
});
答案 0 :(得分:1)
https://plnkr.co/edit/iramGsSrJ2vKYvDPWFTb?p=preview
如果不将视图移动到其中一个父状态,则无法保持视图不刷新。这是应该有效的改变状态
var tags = {
name: 'dash.tags',
url: '?ticker',
views: {
'tagsList@dash': {
templateUrl: 'tags-list.html',
controller: 'tagsController'
}
}
}
var dash = {
name: 'dash',
url: '/dash',
abstract: true,
views: {
'': { templateUrl: 'dashboard.html' },
'tickersList@dash': {
templateUrl: 'tickers-list.html',
controller: 'tickersController'
}
}
};
答案 1 :(得分:1)
我编辑你的plunker工作没有状态刷新:
https://plnkr.co/edit/ntGVGQ06yVQC4W0Fl7A8?p=preview
广播:
$scope.changeScotchState = function(theTicker) {
$rootScope.$broadcast('newData', theTicker);
};
和$ on:
$scope.$on('newData', function(event, ticker){
$scope.tags = getList(ticker);
$scope.ticker = ticker;
})
是最重要的部分和变化。