2015-09-23 4 views
2

Я с нетерпением жду разработки приложения AngularJS, и я удивляюсь, могу ли я использовать единый контроллер для отправки нескольких запросов $ http.get, каждый раз на другой URL-адрес, в зависимости от по шаблону.

Пример:

App.js

.state('app.grocery', { 
    url: '/grocery', 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/grocery.html', 
     controller: 'MasterCtrl' 
     } 
    } 
    }) 

.state('app.beverages', { 
    url: '/beverages', 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/beverages.html', 
     controller: 'MasterCtrl' 
     } 
    } 
    }) 

В моей Controller.js, я хочу, чтобы захватить первый templateURL вызывается и на основе этого установить $ http.get URL.Suppose если templateURL - это templates/grocery.html, URL-адрес http.get будет «xyz.com/grocery.json», и если templateURL является шаблоном/beverages.html, URL-адрес $ http.get будет «xyz.com/beverages .json "

ответ

0

Вы должны проверить, какое название страницы в контроллере должно быть

.controller('MasterCtrl', function($scope, $stateParams,$state) 
{ 
    if($state.current.name==='grocery') 
    { 
     //call grocery $http.get() for grocery 
    } 
    else 
    { 
     //call beverages $http.get() for beverages 
    } 
}) 
0

Вы можете установить ваш jsonName в самом вашем состоянии и использовать получаем, что в контроллере с помощью $state.current, который будет иметь jsonName имущество, которое будет иметь информацию, которую вы хотите.

Код

.state('app.grocery', { 
    url: '/grocery', 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/grocery.html', 
     controller: 'MasterCtrl' 
     } 
    }, 
    jsonName: 'grocery' 
}) 
.state('app.beverages', { 
    url: '/beverages', 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/beverages.html', 
     controller: 'MasterCtrl' 
     } 
    }, 
    jsonName: 'beverages' 
}) 

Контроллер

app.controller('MasterCtrl', function($state, $scope, $http){ 

    //$state.current.jsonName will provide current json name 
    $http.get('xyz.com/'+ $state.current.jsonName +'.json') 
    .succcess(function(){ 
     //code when ajax success 
    }); 

}) 
0

Конечно, вы можете - выше ответ на @Paresh правильно.

Однако, на мой взгляд, вы не должны этого делать. Ваш подход настолько, возможно, из-за этого вам не нравится иметь много файлов или контроллеров. Но какова бы ни была причина, наличие отдельного контроллера поможет вам иметь небольшие единицы четкого кода, каждый из которых несет ответственность за один тип действий.

Если вы когда-либо захотите реализовать модульные тесты или имеете множество вариаций, например, те, которые вы просили, или даже иметь сложную логику: реализовать ее так, как вы собираетесь, потребуется так много логических блоков IF это везде.

И если вы решите, что хотите решить, что «бакалея» должна стать «grocery_main», это будет «найти & replace», и если вы пропустите ни одного, у вас будут ошибки в вашем код довольно легко.

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

Надеюсь, что это поможет

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