2016-01-20 5 views
1

У меня возникла проблема с попыткой передать объект параметра в состояние, используя stage.go().Параметры состояния angularjs не работают

Вот мое состояние определение:

.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

Вы проверили с помощью отладчика, что 'tab.params.name' и' tab.params.description' не являются нулевыми? –

+0

Да, я это проверил. значения есть. – Ian

ответ

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 } 
    }) 

Подробнее о маршрутизации URL можно узнать здесь: https://github.com/angular-ui/ui-router/wiki/url-routing

+0

это похоже на то, как это происходит. теперь единственное, что мне нужно выяснить, это установить свойство ui-sref на динамически сгенерированную вкладку. – Ian

0

Попробуйте в определении состояния:

params: { name: undefined, description: undefined }

или это:

params: ['name', 'description']

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 } 
    }) 

теперь я получаю доступ к переменную ddhinttype в каждом экземпляре контроллера (DrillHoleDdhIntTypeController.js), которая сообщает ему, для какой таблицы выполнять операции против.

Поскольку в ddhinttype также содержится URL-адрес, пользователь может создать закладку, которая вернет их обратно на одну и ту же вкладку, даже если они динамически сгенерированы.

Смежные вопросы