2017-05-31 71 views
1

我有一個pageheader以上的模板angularjs的UI視圖。我想指定一個變量showDropdown來控制pageheader中某些DOM的出現。 showDropdown變量特定於ui-view。例如,showDropdown在第一個視圖中爲true,在第二個視圖中爲false。我如何根據ui-view改變它?如何根據ui-view設置變量?

我試圖設置onEnter()stateProvider變量,但沒有影響。

HTML,

<pageheader></pageheader> 
<br /> 
<div class="container"> 
    <div class="row"><div class="col-xs-12 no-padding"><div ui-view="view"></div></div></div> 
</div> 

pageherder模板,

<div> 
...... 
</div> 
<div ng-if="showDropdown"> 
    ........ 
</div> 

JS,

.config(function($stateProvider) 
{ 
    $stateProvider 
     .state('printer', 
     { 
      url: "/printer", 
      views: 
      { 
       "view": 
       { 
        templateUrl: "/static/tpls/cloud/app/printer.php" 
       } 
      }, 
      onEnter: function(){ 
       showDropdown = false; 
      } 
     }) 
     .state('control', 
     { 
      url: "/control", 
      views: 
      { 
       "view": 
       { 
        templateUrl: "/static/tpls/cloud/app/control.php" 
       } 
      } 
     }) 
}) 

編輯爲Pengyy's answer

app.controller('CloudController', ['$scope', '$http', '$interval', '$timeout', 'optSev', '$state', '$rootScope', function($scope, $http, $interval, $timeout, optSev, $state, $rootScope) 
    { 
     var search = window.location.search.substring(1); 
     var paras = search.split("&"); 
     paras = paras[0].split("="); 
     pid = paras[1]; 
     $scope.pid = pid; 
     $scope.active = {}; 
     $scope.idle = true; 
     $scope.active.status = {}; 
     $scope.active.state = {}; 
     $scope.showDropdown = $state.current.showDropdown; 
     //$scope.showDropdown = $rootScope.showDropdown; 
//console.log($scope.showDropdown); 
console.log($state); 
console.log($state.current); 
//console.log($state.$current); 
..... 

這是非常weried,

console.log($state); // it shows the showDropdown 

enter image description here

console.log($state.current); // the showDropdown is missed. 

enter image description here


+0

嘗試使用$ rootScope:'$ rootScope.showDropdown = TRUE' –

+0

@NinhPham ['當實例期間配置階段$ rootScope'不能被訪問(https://stackoverflow.com/a/10489658/6521116) –

+0

做你想顯示/隱藏'pageheader'組件本身或其中的一部分? –

回答

2

,你可以簡單地添加showDropdown像B您的狀態配置elow:

$stateProvider 
    .state('printer', 
    { 
     url: "/printer", 
     views: 
     { 
     "view": 
     { 
      templateUrl: "/static/tpls/cloud/app/printer.php" 
     } 
     }, 
     showDropdown: false 
    }) 

並在您的控制器中檢索它$state.current.showDropdown


演示plunker

+0

我添加這行'showDropdown:false;',但得到'語法錯誤:缺少}屬性列表後' –

+0

@KrisRoofe我真的很抱歉,您必須刪除';':P – Pengyy

+0

是的,當移動';' ,沒有這樣的錯誤。我正在測試它現在是否有效。 –