2014-09-03 2 views
0

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

Завод имеет несколько массивов и функцию switch() для ее выбора. Заводская функция возвращает функцию. Вот какой код. ddSelections - массив.

languageFactories.factory('changePostDdFactory', ['$translate', function (translate) { 
    return { 
     withLangChoice: function (langKey) { 
      //variables containing arrays and a switch() to select based on langKey 
      return ddSelections; 
     } 
    } 
}]); 

HTML, для кнопки выпадающего меню, который отображает выбранный массив является

<div id="postBox" class="floatingSection" data-ng-controller="postButtonController2"> 
    <button id="postButton" dropdown-menu="ddMenuOptions" dropdown-model="ddMenuSelected" class="btn-menu">{{ 'POST' | translate }}</button> 
</div> 

Контроллер для этой директивы кнопка ниспадающего где я барахтался. Когда я жестко программирую некоторые вещи, это работает, хотя это не похоже на «хороший угловой код». Когда его переменные, я получаю множество проблем. Я полагаю, что я должен работать с $ scope, но, возможно, это вопрос. Проблема $ scope.getCurrentLanguage. Вот код.

residenceApp.controller('postButtonController2', ['$translate', '$scope', 'changePostDdFactory', 

function ($translate, $scope, ddSelections) { 
    //hardcoded works at page load and shows my intention 
    //$scope.getCurrentLanguage = 'en'; //creates Scope and Model for getCurrentLanguage & ddMenuOptions 
    //$scope.ddMenuOptions = ddSelections.withLangChoice($scope.getCurrentLanguage); //shows correct array from factory 
    //here's my latest of many attempts with a user selected variable that is accessed via the $translate directive 
    //per Batarang there is no Scope and Model for getCurrentLanguage & ddMenuOptions 
    $scope.getCurrentLanguage = function ($translate) { 
     alert('here I am'); //does not fire 
     $translate.use(); //getter per http://stackoverflow.com/questions/20444578/get-current-language-with-angular-translate 
     return $translate.use(); //should return 'en' or 'es' 
    }; 
    $scope.ddMenuOptions = ddSelections.withLangChoice($scope.getCurrentLanguage); //no dropdown, no array change 
    //$scope.ddMenuOptions = ddSelections.withLangChoice(getCurrentLanguage); //page does not load 
    $scope.ddMenuSelected = {}; 
    $scope.$watch('ddMenuSelected', function (newVal) { 
     //if watch() triggers, do something 
    }, true); 

ответ

1

Возможно, вам нужно позвонить в офис?
$scope.ddMenuOptions = ddSelections.withLangChoice($scope.getCurrentLanguage($translate));
вместо
$scope.ddMenuOptions = ddSelections.withLangChoice($scope.getCurrentLanguage);

+0

Да, получает переменную в функцию фабрики на странице загрузки. По какой-то причине изменяющиеся языки не работают для этих массивов, как будто $ translate.use(); не получается из $ translate, но, возможно, это другая проблема. $ translate продолжает изменять обычный HTML. Спасибо, это один шаг вперед. –

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