2017-02-01 130 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