2014-04-14 5 views
4

В моем угловом приложении у меня есть несколько функций, которые, я думаю, должны быть в глобальном контроллере. В инфраструктурах MVC на стороне сервера обычно есть глобальный контроллер, который расширяют все остальные контроллеры, в котором я бы поставил эти функции. Мне интересно, есть ли что-то подобное для Углового.Глобальный контроллер AngularJS

Так что в данный момент у меня есть это в app.js:

'use strict'; 

// Declare app level module 
var app = angular.module('app', ['ngRoute']).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 

    // Possible routes can go here 

}]); 

И это в controllers.js:

app.controller('DownloadsController', function ($scope) { 

}); 

Я хочу, чтобы иметь возможность добавлять загрузки в моем приложении, так что я бы написать a $scope.addDownload = function() { ... } в DownloadsController. Это будет работать, однако я хотел бы иметь возможность добавлять загрузки в любом месте своего приложения, что означает вызов функции addDownload() независимо от того, в каком контроллере я нахожусь.

Могу ли я определить глобальный контроллер, который содержит функцию addDownload() и сможете ли вызывать эту функцию со всех моих контроллеров?

+0

это то, что вы должны использовать директиву, или в качестве альтернативы поставщика. –

+0

Вы можете создать сервис для повторного использования функций и впрыска в любой контроллер, который вы хотите .... – Senthil

+0

вот что я только что сказал ... :) знаю свой угловой. Будьте едины с вашим угловым. –

ответ

10

Есть несколько разных подходов, которые я мог бы порекомендовать. Во-первых, даже в приложении типа MVC на стороне сервера это не будет «глобальный» контроллер, а скорее ориентированный на объект сервис ... или «декоратор». Угловые действительно не отличаются в этом отношении тем, что у вас есть возможность украсить ваш объем с желаемой функциональностью. Ваши варианты здесь будут:

  • создать скачать директиву
  • создать загрузки поставщика/услугу/модель
  • расширить сферу с декоратором, чтобы добавить метод для всех контроллеров

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

myApp.provider('download', function DownloadProvider() { 
    var configurableSetting = false; 

    this.setConfigurableSetting = function(value) { 
    configurableSetting = !!value; 
    }; 

    this.$get = ["customArgument", function addDownload(customArgument) { 

    return new Download(customArgument, configurableSetting); 
    }]; 
}); 

function Download(customArgument, configurableSetting){ 
    //download code 
    return { 
    addDownload:function(){ 
     //code for method 
    } 
    } 
} 

Тогда в контроллере:

app.controller('whatever',['download',function(download){ 
     var download1 = download(); //creates a new download instance 
     download.addDownload(); //executes method available on function 

}]) 

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

Для получения более подробной информации о том, как это работает, проверьте угловое руководство разработчика по поставщикам: http://docs.angularjs.org/guide/providers

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