当ui-sref状态改变时,控制器不会刷新

时间:2014-08-22 18:58:31

标签: javascript angularjs controllers angular-ui-router states

前言

点击ui-sref链接不会刷新命名视图'控制器。

问题

如何点击WeeklyCtrl点击ui-sref="root.store.page.ad({ adSlug: promo.code })"上的SidePanelCtrl

注意页面上有重新加载。我看到favicon闪烁,但没有重新启动任何控制器 routes.js

$stateProvider
  .state('root', {
    url: '/',
    abstract: true,
    views: {
      '': {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      }
    }
  })
  .state('root.store', {
    url: ':storeSlug',
    views: {          
      'sidepanel': {
        templateUrl: 'views/partials/side-panel.html',
        controller: 'SidePanelCtrl'
      },
      'weekly': {
        templateUrl: 'views/partials/weekly.html',
        controller: 'WeeklyCtrl'
      },
    }
  })
  .state('root.store.page', {

    url: '/page',

  })
  .state('root.store.page.ad', {
    url: '/:adSlug',


  })

的index.html

<div ui-view=""></div>

main.html中

  <div ui-view="weekly"></div>
  <div ui-view="sidepanel"></div>

侧panel.html

<a ng-repeat="promo in promos" ui-sref="root.store.page.ad({ adSlug: promo.code })"  >
    <h3>...</h3>
</a>

WeeklyCtrl init触发api调用时会触发。

Pages.details.getPages($scope).success(function(data){
    console.log(data);
});

最后,当我在促销

之间切换时,我希望再次触发

更新

点击链接: API响应3次。控制器多次重启 3 times

1 个答案:

答案 0 :(得分:4)

我猜这是默认行为。如果您想要实际刷新控制器,请将此功能添加到控制器:

$scope.boom = function(promoCode){
      $state.transitionTo("root.store.page.ad", 
          { adSlug: promoCode }, { notify: true }); 
};

并在您看来:

<a ng-repeat="promo in promos" 
    ng-click="boom(promo.code);$event.preventDefault();"  >
    <h3>...</h3>
</a>

如果您不喜欢这样,请随时下载ui-sref的源代码并根据该代码创建新指令,称为 ui-sref-ctrl

  

这就是ui-router的设计方式。

     

仅在控制器不处于相同状态时才加载控制器。   ui-router不会重新运行控制器,也不会重新评估视图   模板。 即使在多个状态下使用相同的控制器也是如此   在这些之间切换,控制器不会重新运行

"ui-sref" does not refresh the "ui-view"(its controller does not rerun) when a link is clicked twice