javascript - 在选择标签中使用 ng-click 的 Angular

标签 javascript html angularjs html-select angularjs-ng-click

我想要一个下拉列表来更改我网站的显示语言,所以我目前有:

<select ng-controller="langCtrl">
     <option ng-click="switchLanguage('en')" value="en">EN</option>
     <option ng-click="switchLanguage('de')" value="de">DE</option>
     <option ng-click="switchLanguage('it')" value="it">IT</option>
     <option ng-click="switchLanguage('fr')" value="fr">FR</option>
     <option ng-click="switchLanguage('es')" value="es">ES</option>
</select>

但是由于某些原因,这些 ng-click 似乎没有调用指定的函数。我将它们全部更改为按钮,这似乎工作正常,但我想要一个下拉列表,而不是按钮。谁能告诉我为什么这不起作用?

Controller 代码:

app.controller('langCtrl', function($translate, $location, $scope) {
$scope.switchLanguage = function (langKey) {
    switch(langKey) {
        case 'en':
            $location.url('/#en');
            break;
        case 'de':
            $location.url('/#de');
            break;
        case 'it':
            $location.url('/#it');
            break;
        case 'fr':
            $location.url('/#fr');
            break;
        case 'es':
            $location.url('/#es');
            break;
        default:
            $location.url('/#en');
    }
    $translate.use(langKey);
  };
});

最佳答案

一个正确的方法是使用 ng-model

angular.module('test', [])

.controller('langCtrl', function($scope, $location/*, $translate*/) {
  $scope.switchLanguage = function() {
    langKey = $scope.selected;
    
    switch (langKey) {
      case 'en':
        alert('/#en');
        //$location.url('/#en');
        break;
      case 'de':
        alert('/#de');
        //$location.url('/#de');
        break;
      case 'it':
        alert('/#it');
        //$location.url('/#it');
        break;
      case 'fr':
        alert('/#fr');
        //$location.url('/#fr');
        break;
      case 'es':
        alert('/#es');
        //$location.url('/#es');
        break;
      default:
        alert('/#en');
        //$location.url('/#en');
    }
    //$translate.use(langKey);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<select ng-app='test' ng-controller="langCtrl" ng-model="selected" ng-change="switchLanguage()">
  <option value="en">EN</option>
  <option value="de">DE</option>
  <option value="it">IT</option>
  <option value="fr">FR</option>
  <option value="es">ES</option>
</select>

虽然不确定为什么您的示例不起作用,但它看起来不错。

关于javascript - 在选择标签中使用 ng-click 的 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31136984/

相关文章:

javascript - 谷歌地图 API : Remove and reset markers on mouseover

javascript - 为什么通过 AJAX 下载 zip 文件需要这么长时间?

javascript - 使用 UFT 自动化 AngularJS UI-Grid

javascript - Aurelia:如何检测或注册自定义元素何时加载并准备好与之交互的回调

javascript - 使用 Controller 中对象的位置 x,y 创建动态网格或表格 - bootstrap、AngularJS

javascript - 查询 : Creating Dynamic Select list

php - 在居中的弹出窗口中打开表单提交的消息

javascript - 将列表分成div以一次只显示一个

angularjs - AngularJS 的问题和设置自定义转发器指令

javascript - ng-view 在 Angular 中不起作用