[JS SPA] Правилен подход към писане на контролер


1

Здравейте,

Съвсем зелен съм в AngularJS...за да бъда по-конкретен сега започвам да го преглеждам и изучавам.

Преглегах лекциите от Софтуерната и училищната академия, както и примерните проектчета.На първо четене ми прави впечатление, че в един контролер се слага само един метод (функция).Примерно ако имам UserController в ASP.NET MVC в него слагам следните action-и Details,Create,Update,Detele,All,Hide и каквото друго ми трябва свързано с User-a.Отново да напомня, нов съм в AngularJS, но съдейки по демо-тата оставам с впечтлението, че за един контролер се прави един "action".

Сега си пренаписвам един проект от ASP.NET MVC на WebApi + AngularJS (с цел изучаване на двете технологии) и ми прави впечаление че ако вкарам два action-a в контролер на AngularJS, примерно в MoviesController слагам getMoviesDetails и getAllMovies, винаги ми прави двете заявки към сървъра...Може би нещо не правя както хората...не знам, но има ли вариант примерно да му задам нещо такова:

$routeProvider
            .when('/Movies/Details/:id', {
                templateUrl: 'views/partials/movie-details.html',
                controller: 'MoviesController'
action:'GetDetails'
            })
            .when('/Movies/All', {
                templateUrl: 'views/partials/movies-grid.html',
                controller: 'MoviesController'
action:'GetAllMovies'
            });

т.е. при определен раут да ми вика конкретен "action" от конткретен контролер...

Благодаря Ви.

PS.На второ четете малко "мътно" ми остана въпросът с нестване на partialview-та и дали е възможно и ако ми трябват повече от едно partialview-та, но когато се сблъскам с конкретна ситуация ще си задам въпроса ;)




Отговори



2

Колега, мястото където се правят заявки в Angular не е контролера. Тяхното място е в отделен файл, в който използваш или service или factory. Като според мен factory е за предпочитане, въпреки че и 2те са реално Singleton. Този сървис се реферира вече в контролера и през него правиш заявките. В контролера имаш само моделите, към които си се байнднал и някаква логика, която да ги променя.

Относно factroy-то, там имаш отлдене файл,в който имаш нещо от сорта на

angular.module('sample').factory('SampleSercvice', SampleService);

function SampleService($http, $q) {

      return {

              get: function() {

                              $http.get(...........);

                }

}

Съответно този SampleService се инжектира в контролера и го викаш така: SampleService.get()

PS: Oтносно nest-ването на PartialView-та, там може да ти се наложи 1во да компилираш angular кода, ако имаш разни директиви във view-тата. Погледни ngi-ind-html и ng-include


от mita4itu (1969 точки)


0

Благодаря Ви за отговора,

От него да разбирам ли, че за всяка отделна заявка трябва да си правя отделен контролер...Примерно...

moviesApp.factory('MoviesData', function ($resource) {

    var movieDetails = $resource('baseUrl' + '/API/Movies/Details/:id', {id: '@id'});
    var allMovies = $resource('baseUrl' + '/API/Movies/GetAllMovies');

    return {

        getById: function (id) {

            return movieDetails.get({id: id});
        },
        getAll: function () {

            return allMovies.query();
        }

    }

});

Да си направя два отделни контролера...Единият MovieDetailsController и другият MoviesController.Първият да връща movie обект по ID, вторият колекция от movies...

PS.Извинявам се отново за глупавите въпроси.


от dada166 (1113 точки)

0

Имаш един MoviesController, който ти е връзката между view-то (HTML-a) и js логиката, а отделно имаш един MoviesServices. който съдържа,примерно, get по ID, get на всички филми, post, update, delete. В MoviesController инжектираш MoviesService и с '.' (точка) извикваш съответните методи или обекти, който връщаш публично в MoviesService /от сървиса можеш да достъпваш само това, което връщаш, т.е. е в return-a/.

Примерен контролер

Примерен сървис


от mita4itu (1969 точки)