我在尝试使用stage.go()将参数对象传递给某个状态时遇到问题。
这是我的州定义:
.state('drillhole.ddhinttype', {
url: '/ddhinttype',
templateUrl: VIRTUAL_DIR_PATH + '/App/Views/drillholemanager/drillhole/tabddhinttype.html?v=' + fileVer,
controller: 'DrillHoleDdhIntTypeController',
params: { name: null, description: null }
})
这是我的控制器:
try {
angular.module('centric.drillhole.manager');
} catch (e) {
angular.module('centric.drillhole.manager', ['app.config', 'ui.router', 'kendo.directives', 'ui.bootstrap', 'ngCookies', 'centric.common', 'centric.notification', 'pascalprecht.translate', 'centric.security', 'centric.app.settings']);
}
angular.module('centric.drillhole.manager').controller('DrillHoleDdhIntTypeController', ['$scope', 'CentricUIHelper', 'NumberHelper', 'DrillHoleManagerService', 'app.config', '$stateParams',
function ($scope, uihelper, numberHelper, service, appconfig, $stateParams) {
$scope.loading = false;
$scope.isbusy = function () {
return $scope.loading || $scope.$parent.loading;
}
var load = function () {
var hello = $stateParams.name;
var hello2 = $stateParams.description;
};
load();
}]);
我这样称呼州:
$state.go('drillhole.ddhinttype', { name: tab.params.name, description: tab.params.description });
在我的控制器中,名称和描述属性始终为空。
不确定我在这里缺少什么。有什么想法吗?
答案 0 :(得分:1)
如果你将params放在你的网址中,你就可以使用$stateParams
.state('drillhole.ddhinttype', {
url: '/ddhinttype/:name/:description',
templateUrl: VIRTUAL_DIR_PATH + '/App/Views/drillholemanager/drillhole/tabddhinttype.html?v=' + fileVer,
controller: 'DrillHoleDdhIntTypeController',
params: { name: null, description: null }
})
您可以在此处详细了解网址路由:https://github.com/angular-ui/ui-router/wiki/url-routing
答案 1 :(得分:0)
在状态定义中尝试此操作:
params: { name: undefined, description: undefined }
或者这个:
params: ['name', 'description']
答案 2 :(得分:0)
我觉得我应该发布最终结果。我已决定在URL中传递参数,以便我可以为多个选项卡重复使用相同的控制器,每个选项卡具有相同的功能,但是对于数据库中的不同表。
以下是我的基本控制器创建选项卡(CoreLogController.js)的部分:
service.getDrillHoleIntervalTypes()
.success(function (res) {
$scope.data.drillHoleIntervalTypes = res;
for (var i = 0; i < $scope.data.drillHoleIntervalTypes.length; i++) {
// add the tab and set it as active if we're in the correct $state
$scope.dynamictabs.push({ heading: $scope.data.drillHoleIntervalTypes[i].Name, route: 'drillhole.ddhinttype', params: { ddhinttype: $scope.data.drillHoleIntervalTypes[i].Name }, active: ($scope.$state.params.ddhinttype == $scope.data.drillHoleIntervalTypes[i].Name) });
}
})
.error(function (error) {
uihelper.showError(error);
});
以下是显示标签的相关HTML部分(corelog.html):
<tabset>
<tab ng-repeat="t in statictabs" heading="{{t.heading}}" ui-sref="{{t.route}}" active="t.active"></tab>
<tab ng-repeat="t in dynamictabs" heading="{{t.heading}}" ui-sref="drillhole.ddhinttype({ddhinttype: '{{t.params.ddhinttype}}'})" active="t.active"></tab>
</tabset>
这是我定义状态(app.js)的地方:
.state('drillhole.ddhinttype', {
url: '/ddhinttype/{ddhinttype}',
templateUrl: VIRTUAL_DIR_PATH + '/App/Views/drillholemanager/drillhole/tabddhinttype.html?v=' + fileVer,
controller: 'DrillHoleDdhIntTypeController',
params: { ddhinttype: null }
})
我现在可以访问控制器的每个实例(DrillHoleDdhIntTypeController.js)上的ddhinttype变量,该变量告诉它对哪个表执行操作。
由于ddhinttype还包含URL,用户可以创建一个书签,即使它们是动态生成的,也会将它们带回到同一个标签页。