2015-07-28 5 views
0

Я попытался это не повезло:Угловая конструктор в контроллере

app.controller('PageLayoutController', function ($scope) 
{ 
    // Scope properties 
    $scope.PageMap = {}; 

    // Constructor 
    function PageLayoutController() { 
     alert("contructing"); 
    } 

    return PageLayoutController; 
}); 

Я ищу по умолчанию или популярным способом определения конструкт этих контроллеров в угловой.

Я знаю, что могу просто создать функцию Construct, а затем сначала называть ее, но я задавался вопросом, был ли официальный способ сделать это?

+0

что вы пытаетесь построить? 'function ($ scope) {' сам является конструктором контроллера ... –

ответ

3

Я предполагаю, что вы можете вызвать определенную функцию во время создания экземпляра контроллера. Если это требование, вы можете следовать следующему синтаксису.

angular.module('myApp', []) 
    .controller('PageLayoutController', '$scope', function($scope) { 
     // Scope properties 
     $scope.PageMap = {}; 

     $scope.PageLayoutController = function() { 
      // Do stuffs here 
     }; 

     // Call the function when the Controller get first invoked 
     $scope.PageLayoutController(); 
    }); 

Также вы можете слушать в $routeChangeStart событие и вызов функции, а также.

$scope.$on('$routeChangeStart', function(next, current) { 
    ... you could trigger something here ... 
}); 

Также вы можете использовать любое из следующих событий.

  • $ routeChangeSuccess
  • $ routeChangeError
+0

Спасибо, это будет делать. та. – Jimmyt1988

1

функция Контроллер уже конструктор так, что вы пишите в его теле будет выполняться на строительстве.

1

Не совсем уверен, что именно вы пытаетесь сделать. Но, будучи конкретным, угловой экземпляр конструктора контроллера с оператором new, когда это необходимо. Итак, что вы пытаетесь сделать, это скорее специфический для javascript вопрос, чем угловой. Он делает это, как:

если бы он был new (ctor()) ваш код будет работать, но это не так, как это происходит, очевидно. Сообщение функции, переданное в, обновляется, а не результат выполнения функции. Поэтому в вашем случае, если вы это сделаете, вам нужно вернуть новый экземпляр. т.е.

return new PageLayoutController; 

Example

+0

Прохладный, спасибо. То же самое, что и тот, который помечен как ответ .. но гораздо более распространенный синтаксис. Хороший. – Jimmyt1988

+0

@ Jimmyt1988 Я не думаю, что это то же самое, что и выделенный ответ, я упомянул о том, что конкретно происходит с вашим вопросом, если ваша проблема заключалась в том, чтобы выполнить что-то при создании экземпляра контроллера, вы могли бы также запустить IIFE в своем контроллере напрямую или даже функция, определенная в ее замыкании. Вам необязательно добавлять этот метод в область видимости. – PSL

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