Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 如何删除控制器之间的重复共享功能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在控制器之间使用i18n转换功能.

因此每个控制器都应该有getCityName和getCountryName来将其转换为正确的lang.

我尝试使用Angular服务来减少重复.

如您所见,我仍然需要分别在两个控制器中定义这些功能.

在我的情况下,是否可以删除控制器中定义函数的重复?

谢谢

Departure.html

<div  ng-repeat="departure in departures_lst">
    <div class="panel-title">
      <h5>{{getCountryName(departure.country)}}</h5>
    </div>
            <li  ng-repeat="city in departure.cities">
              <a ng-click="get_desTinations(city)">
                {{getCityName(city)}}
              </a>
           </li>
  </div>

Arrival.html

<div  ng-repeat="arrive in arrives_lst">
    <div class="panel-title">
      <h5>{{getCountryName(arrive.country)}}</h5>
    </div>
            <li  ng-repeat="city in arrive.cities">
              <a ng-click="get_desTinations(city)">
                {{getCityName(city)}}
              </a>
           </li>
  </div>

角度js

App.service('I18nservice',function () {
    this.getCountryName = function (country_Name) {
      return I18n.t("country." + country_Name) + country_name
    }
    this.getCityName = function (city_Name) {
      return I18n.t("city." + city_Name) + city_name
    }
});

App.controller("departures_ctrl",function($scope,I18nservice,$LOCATIOn,$http) {
    $scope.getCountryName = function(country_Name){
      return I18nservice.getCountryName(country_Name);
    }
    $scope.getCityName = function(city_Name){
      return I18nservice.getCityName(city_Name);
    }
});

App.controller("arrivals_ctrl",$route,$routeParams,$http,$window,$LOCATIOn) {
    $scope.getCountryName = function(country_Name){
      return I18nservice.getCountryName(country_Name);
    }
    $scope.getCityName = function(city_Name){
      return I18nservice.getCityName(city_Name);
    }


});

解决方法

避免重复的一种方法是向服务功能添加参数.

你可以写这样的东西:

app.controller('FooCtrl',TranslationservicE){

  $scope.getName = function(name,flag){
   Translationservice.getName(name,flag); 
  }

});

app.controller('BarCtrl',flag); 
  }

});

app.factory('Translationservice',function(){

  return {
    getName: function(name,flag){
      if(flag == 'city'){
          //...
      } 
      else{
        //...  
      }
    }
  }
})

在HTML视图中,您可以使用:

<div ng-app="myApp" ng-controller="FooCtrl">

  <p>{{getName(obj.city,'city')}}</p>

</div>

如果你想避免在两个控制器中声明两次getName函数,你可以将函数分配给$rootScope但是IMO它不是一个理想的解决方案,因为它可以使代码的可读性降低.

大佬总结

以上是大佬教程为你收集整理的angularjs – 如何删除控制器之间的重复共享功能全部内容,希望文章能够帮你解决angularjs – 如何删除控制器之间的重复共享功能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。