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

Вопрос в том, что объявляет vars в верхней части контроллера хорошей практикой для использования переменных в частной области? – JamesNB

+0

Я думаю, что вы немного запутались между JavaScript и Java. Эти контроллеры не используются пользователями. все это создается на стороне клиента. В Java обычно, когда у нас есть класс Singleton, мы избегаем наличия переменных, объявленных в начале класса, иначе он будет использоваться для всех потоков. Если вам нужна переменная, в которой нет другого контроллера, он может непреднамеренно компрометировать, а затем привязать к области, которую он получит, созданной с областью действия и уничтоженной областью. –

1

Первый запуск триггера в контроллере, поскольку он иногда создает проблемы. вы можете использовать угловую директиву 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 с точки зрения? Является ли объявление vars в верхней части контроллера, как это, хорошим способом иметь переменные с ограниченной видимостью? – JamesNB

+0

Какие проблемы вызывает инициирование инициализации в контроллере? – JamesNB