angularjs 控制器执行两次
angualrjs controller execution twice
我使用 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页面跳转时会记录
{编号:2}
999
{编号:1}
999
ui-router
部分工作是通过将给定的 url 解析为特定状态(例如,当您重新加载页面时),因此不建议对不同的 url 使用相同的 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})"
我使用 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页面跳转时会记录 {编号:2} 999 {编号:1} 999
ui-router
部分工作是通过将给定的 url 解析为特定状态(例如,当您重新加载页面时),因此不建议对不同的 url 使用相同的 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})"