2016-03-14 5 views
0

Кто-то указал в моей работе, что я сделал функцию init() общедоступной и что я должен сделать ее закрытой. В настоящее время моя функция выглядит какФункция init() Открытый экземпляр против частного экземпляра

that.init = function(){ 
    //my Code 
} 
that.init(); 

Из того, что я посмотрел до сих пор, было бы лучше, чтобы объявить его таким образом. Пожалуйста, исправьте меня, если я ошибаюсь

function init() { 
//my code 
} 
init(); 

Я хотел бы знать разницу, спасибо в Advance.

+0

взгляните на закрытие – brk

+1

Что вы инициализацией? Можете ли вы привести полный пример. –

+0

Привет @DmitriPavlutin Я инициализирую $ http.get call – Vijay

ответ

0

У вас есть следующие случаи:

1) Объявить функцию, которая доступна в текущей области видимости контроллера:

app.controller('Ctrl', function() { 

    function init() { 
    //my code 
    } 
    init(); 

}); 

Таким образом, функция init() будет доступна только в пределах области видимости функции контроллера (не Angular's $scope). init() является частной.
Это правильный подход, когда init() используется только в контроллере.

2) Объявить функцию как свойство this контекста контроллера

app.controller('Ctrl', function() { 

    this.init = function() { 
    //my code 
    } 
    this.init(); 

}); 

В этом случае любой код, который имеет доступ к связи контроллера this будет иметь возможность использовать или даже изменить функцию this.init(). Говоря простыми словами, это публично.
Вы можете позже использовать init() в представлении, например:

<div ng-controller="Ctrl as ctrl"> 
    <button ng-click="ctrl.init()">Init me</button> 
</div> 

Проверьте эту статью о scopes and context и некоторые рекомендации от Angular style guide.

+0

Спасибо, что эта работа для меня :) – Vijay

+0

@Vijay Добро пожаловать. –

0

Из того, что я понимаю из вашего кода, вы используете синтаксис controllerAs в своем приложении angularjs.

that.init = function(){ 
    //my Code 
} 
that.init(); 

Здесь that указывает на ваш vm.

function init() { 
//my code 
} 
init(); 

В обоих случаях нет различий в тонкости. Я бы предпочел последний, потому что он не привязан к vm. Вы должны приложить что-то к $scope или vm, когда вы хотите сделать его доступным для своего вида, а также сделать с function declaration.

Частный members/methods в JavaScript:

function Vijay(){ 
    var myPrivateVar; // this is private 

    var private_stuff = function() // Only visible inside Restaurant() 
    { 
     myPrivateVar= "some value"; 
    } 

    this.public= function() // is visible to all 
    { 
     private_stuff(); 
    } 

} 

Вы можете прочитать на частных пользователей/метод здесь: http://javascript.crockford.com/private.html

+0

Спасибо Thalaivar :) – Vijay

Смежные вопросы