2016-02-05 101 views
3

我是新來的複雜角度指令。我在rootScope中有一個名爲$root.page的變量。我已成立了一個手錶就像這樣:

$scope.$watch(
    "$root.page", 
    function handleChange(newValue, oldValue) { 
    //show the select page only on page change 

    console.log(oldValue, newValue); 

    if (!oldValue || oldValue !== newValue) { 
     $scope.showSelectOnly = true; 
    } 
    } 
); 

目前我的代碼是結構化的方式,$scope.showSelectOnly始終是真實的。我只想$scope.showSelectOnly$root.page發生變化時爲真,我希望它在所有其他情況下都是錯誤的(即當變量$root.page沒有變化時)。

+0

有關添加else語句和分配假值是什麼$範圍.showSelectOnly? – chaoticmind

+0

我從字面上試圖2分鐘前,它的工作。我沒有意識到''watch watch''就是這樣工作的,你也可以檢查'non-changes'。我猜這是$手錶ng-change的情況嗎? – devdropper87

+0

我很快就說過了 - 那沒有用 – devdropper87

回答

1

我不認爲你需要這種情況下的手錶。你可能想用角度值來代替。您可以在整個角度模塊應用程序中訪問角度值。通過這一點,您可以在更改頁面時更新showSelectOnly。

angular.module('myApp', []) 
    .value('page', true) 
    .value('showSelectOnly', true); 

然後,您可以將頁面注入模塊中的任何控制器,並根據需要更新這兩個值。

angular.module('myApp') 
    .controller('myCtrl', function (page, showSelectOnly) { 
     if (!page) { 
     showSelectOnly = true; 
     } 
    }); 
+0

我相信這個值應該是一個帶有「page」和「showSelectOnly」鍵的散列值,否則他們將不得不通過一個相當間接的過程來改變構造存儲在值中。 – jusopi

0

這裏是你需要的代碼:

demo

HTML:

<div ng-app="app" ng-controller='myCtrl as vm'> 

    <button ng-click="$root.page = 1">Change root Page</button> 
    <label> 
    showSelectOnly: {{showSelectOnly}} 
    </label> 

</div> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script> 

的javascript:

angular.module('app', []) 
.controller('myCtrl', function($scope) { 
    var vm = this; 
    $scope.showSelectOnly = false; 

    $scope.$watch(
    "$root.page", 
    function handleChange(newValue, oldValue) { 
     if (newValue !== oldValue) { 
     $scope.showSelectOnly = true; 
     } 
    } 
); 
}) 
+0

你的演示覆制我的問題:)我點擊一次按鈕,它永遠保持真實,一旦沒有變化,它不會回到假 – devdropper87

+0

第一個狀態是假的,然後你點擊按鈕狀態變化,它設置爲true。如果再次點擊完成,您是否希望將其更改爲false? –

+0

是的,正如我在我的問題中提到的,我希望它在所有其他情況下都是錯誤的(即,當$ root.page變量沒有改變時)。 – devdropper87