Angular ui-router给MVC控制器的隐藏参数

本文关键字:隐藏 参数 控制器 MVC ui-router Angular | 更新日期: 2023-09-27 18:12:15

我为我的一个标签设置了以下ui-router状态:

$stateProvider
      .state('systems', {
          url: '/Tabs/System',
          templateUrl: function ($stateParams) {
              return ('/Tabs/Systems/IndexNoLayout') + (typeof $stateParams.CustomerName === 'undefined' ? '' : '/' + $stateParams.CustomerName);
          },
          params: { CustomerName: '' },
          controller: 'systemCtrl'
      });

标签的链接:

<a ui-sref="systems({CustomerName: 'dummyCustomer'})">
    Save state
</a>

和一个带有可选参数的MVC控制器:

public ActionResult IndexNoLayout(string CustomerName){...}

这个参数然后在使用Razor的MVC视图中使用。上面的代码可以工作。但是我希望我的templateUrl定义如下:

templateUrl: '/Tabs/Systems/IndexNoLayout'

这样我就可以很容易地删除$stateChangeStart上的$templateCache:

$templateCache.remove(fromState.templateUrl);

有可能吗?

Angular ui-router给MVC控制器的隐藏参数

这篇文章帮我解决了这个问题。

因此我的解决方案:

  $stateProvider
      .state('systems', {
          url: '/Tabs/System',             
          templateUrl:'/Tabs/Systems/IndexNoLayout',
          params: { CustomerName: '' },
          controller: 'systemCtrl'              
      });

在我的$stateChangeStart:

 $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {            
        if (toState.name == "systems") {
            toState.templateUrl = ('/Tabs/Systems/IndexNoLayout' + (typeof toParams.CustomerName === 'undefined' ? '' : '/' + toParams.CustomerName));
        }
        $templateCache.remove(toState.templateUrl); ...});