2017-02-01 128 views
0

在我聲明瞭控制,像這樣的觀點:角和javascript範圍的變量訪問

<div data-ng-controller="myController as myCtrl"> 
    {{myCtrl.selectedMonth}} 
</div> 

我希望能夠在視圖中訪問一個月,但我不想日期可從視圖訪問的對象。這是否會這樣做? testabc是否可以從視圖中訪問?這是在控制器上使用私有範圍變量的好方法嗎?

;(function() { 
    'use strict'; 

    angular 
     .module('myApp') 
     .controller('myController', myController); 

    function myController() { 

     var testabc = 'can you see this'; 
     var dateRef = new Date(); 
     var vm = this; 

     angular.extend(vm, { 
       selectedMonth: undefined 
     }); 

     init(); 

     function init(){ 

      vm.selectedMonth = dateRef.getMonth(); 
     } 


    } 

}()); 

回答

0

任何你綁定到範圍的東西都可以在視圖中訪問。範圍是控制器和HTML視圖之間的粘合劑。如果你只需要將月份綁定到vm就可以訪問。

vm.selectedMonth= dateRef.getMonth(); 

這條線就夠了。

+0

問題是,在控制器的頂部聲明變量是私人範圍變量的一個好習慣嗎? – JamesNB

+0

我認爲你對JavaScript和Java有點混淆。這些控制器不會在用戶之間共享。它都是在客戶端實例化的。在Java中,當我們有Singleton類時,我們避免在類的頂部聲明變量,否則它將在所有線程中共享。如果你需要一個沒有其他控制器可以無意中破壞的變量,那麼綁定到作用域將被創建的作用域並被作用域銷燬。 –

1

首先不要在控制器中觸發init,因爲它有時會產生問題。你可以使用angular ng-init指令。

;(function() { 
    'use strict'; 

    angular 
     .module('myApp') 
     .controller('myController', myController); 

    function myController() { 

     var testabc = 'can you see this'; 
     var dateRef = new Date(); 
     var vm = this; 

     angular.extend(vm, { 
       selectedMonth: undefined, 
       init:init 
     }); 



     function init(){ 

      vm.selectedMonth = dateRef.getMonth(); 
     } 


    } 

}()); 

,你的看法會

<div data-ng-controller="myController as myCtrl" ng-init="myCtrl.init()"> 
    {{myCtrl.selectedMonth}} 
</div> 

P.S是你selectedMonth在視圖中可見。

+0

testabc是否可以從視圖中訪問?在這個控制器的頂部聲明變量是否是一個私有範圍變量的好方法? – JamesNB

+0

在控制器中觸發初始化會導致哪些問題? – JamesNB