2014-09-03 70 views
0

我有一个Angular工厂生成一个函数,其中一个变量为下拉列表选择一个数组。看来我应该从控制器中的用户选择中设置该变量。这两部分工作,但我无法将变量放入控制器的函数中。在Angular工厂的函数中设置一个变量

工厂有几个数组和一个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> 

该按钮下拉指令控制器是我在哪里挣扎。当我硬编码一些有用的东西,虽然它看起来不像“好的Angular代码”。当它的变量,我得到各种各样的问题。我认为我应该与$范围合作,但也许这是值得商榷的。 $ 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。谢谢,它向前迈进了一步。 – 2014-09-03 15:08:15

相关问题