我使用ui-router从导航跳转或从svg页面跳转只是使用相同的控制器,相同的html模型,相同的css文件。主要通过参数来确定数据切换。从导航跳跃是正常的。从svg页面跳转,控制器将执行两次。第一次执行是正常的,但第二次将执行第一次state()。最后,发件人发送的参数会改为第一个值吗? 对不起,我不擅长英语。请查看以下代码。 非常感谢那些能帮助我的人!
这是州()
// .state('main.visual_2d_equipdata2', {
// url: '/visual/2D/equipdata',
// templateUrl: '../views/visual/2D/equipdata.html',
// controller: 'Visual2dEquipDataController',
// css: '../static/visual/2D/css/equipdata.css',
// params: { 'id':2 }
// })
// .state('main.visual_2d_equipdata3', {
// url: '/visual/2D/equipdata',
// templateUrl: '../views/visual/2D/equipdata.html',
// controller: 'Visual2dEquipDataController',
// css: '../static/visual/2D/css/equipdata.css',
// params: { 'id': 3 }
// })
// .state('main.visual_2d_equipdata4', {
// url: '/visual/2D/equipdata',
// templateUrl: '../views/visual/2D/equipdata.html',
// controller: 'Visual2dEquipDataController',
// css: '../static/visual/2D/css/equipdata.css',
// params: { 'id': 4 }
// })
// .state('main.visual_2d_equipdata5', {
// url: '/visual/2D/equipdata',
// templateUrl: '../views/visual/2D/equipdata.html',
// controller: 'Visual2dEquipDataController',
// css: '../static/visual/2D/css/equipdata.css',
// params: { 'id': 5 }
// })
// .state('main.visual_2d_equipdata6', {
// url: '/visual/2D/equipdata',
// templateUrl: '../views/visual/2D/equipdata.html',
// controller: 'Visual2dEquipDataController',
// css: '../static/visual/2D/css/equipdata.css',
// params: { 'id': 6}
// })
这是我的导航跳线功能
$scope.jumper = function(sref) {
$scope.nav_total = false;
if (sref == "about") {
$scope.about_window = true;
} else if (sref == "event") {
window.open("#/" + sref, target = "_blank");
} else if (sref == "info") {
window.open("#/" + sref, target = "_blank");
} else if (sref == "config") {
$state.go("main.config.personnel");
} else {
sref = sref.replace(/\./g, '_');
console.log(6666);
$state.go("main." + sref);
}
};
这是svg控制器
// switch(parseInt(id)){
// case 1:
// $state.go("main.visual_2d_equipdata1" );
// break;
// case 2:
// $state.go("main.visual_2d_equipdata2");
// break;
// case 3:
// $state.go("main.visual_2d_equipdata3");
// break;
// case 4:
// $state.go("main.visual_2d_equipdata4");
// break;
// case 5:
// $state.go("main.visual_2d_equipdata5");
// break;
// case 6:
// $state.go("main.visual_2d_equipdata6");
// break;
// }
这是从svg控制器跳转时将执行两次的主要控制器
angular.module('app.con.visual.2d.equipdata', []).controller('Visual2dEquipDataController', ['$scope', '$state', 'EventService', 'Visual2dService', '$stateParams', function($scope, $state, EventService, Visual2dService, $stateParams) {
$scope.equipNum = $stateParams.id;
console.log( $stateParams);
console.log(999);
var getIDNumber = function(){
switch($stateParams.id){
case 2:
var equipId = "1.0005";
break;
case 1:
var equipId = "1.0004";
break;
case 3:
var equipId = "1.0004";
break;
case 4:
var equipId = "1.0004";
break;
case 5:
var equipId = "1.0005";
break;
case 6:
var equipId = "1.0004";
break;
}
}
// console.log( equipId);
var aircondition = function() {
$scope.actual_ac = { "access_token": sessionStorage.access_token, "type": "actual_object", "id": [ $scope.equipId ] };
Visual2dService.data_2d($scope.actual_ac).then(function(res) {
if (res.errcode == "00000") {
console.log(res);
var analog = res.data[0].analog;
$scope.analogs = new Array();
for (var i = 0; i < analog.level.length; i++) {
var item = new Object();
item["level"] = analog.level[i];
item["property"] = analog.property[i];
// item["unit"] = analog.unit[i];
item["value"] = analog.value[i];
$scope.analogs.push(item);
};
var digit = res.data[0].digit;
$scope.digits = new Array();
for (var i = 0; i < digit.level.length; i++) {
var item = new Object();
item["level"] = digit.level[i];
item["property"] = digit.property[i];
if (digit.level[i] == 0) {
item["show"] = "check";
} else {
item["show"] = "exclamation";
};
$scope.digits.push(item);
};
} else {
console.info(res.errmsg);
};
});
};
var init = function() {
getIDNumber();
aircondition();
// airscreen();
// setTimeout(init, sessionStorage.reload_timeout);
};
init();
}]);
请注意
console.log( $stateParams);
console.log(999);
当点击2跳svg页面时会记录 {id:2} 999 {id:1} 999
答案 0 :(得分:0)
ui-router
部分通过将给定的URL解析为特定状态(例如,当您重新加载页面时),因此不建议为不同的状态使用相同的URL。
对于您的情况,如果您不介意在网址中包含id
,则状态定义可以大大简化为
.state('main.visual_2d_equipdata', {
url: '/visual/2D/equipdata/:id',
templateUrl: '../views/visual/2D/equipdata.html',
controller: 'Visual2dEquipDataController',
css: '../static/visual/2D/css/equipdata.css'
})
因此,在目的地,您也可以使用$stateParams.id
。
导航到此状态时需要进行一些更改
$state.go('main.visual_2d_equipdata', {id:2});
或
ui-sref="main.visual_2d_equipdata({id:2})"