根据需求在控制器中设置方法

时间:2015-03-01 06:45:16

标签: javascript angularjs

我正在处理GalleryController,我正在尝试添加一个名为setCurrent的方法,该方法接受一个值并将其分配给 current。如果没有传入任何值,我需要将current设置为0

以下是我所写的内容,它似乎不正确:

(function() {
  var app = angular.module('gemStore', []);

  app.controller('GalleryController', function(){
    this.current = 0;

    this.setCurrent = setCurrent(intValue){
      if(intValue === null){

        this.current = 0;
      }
      else {
        this.current = intValue;
      }
    };

  });

  app.controller('StoreController', function(){
    this.products = gems;
  });

  app.controller('TabController', function(){
    this.tab = 1;

    this.setTab = function(newValue){
      this.tab = newValue;
    };

    this.isSet = function(tabName){
      return this.tab === tabName;
    };
  });

我应该首先按照要求中的说明设置this.current = intValue吗?

6 个答案:

答案 0 :(得分:1)

如果未传入任何值,则intValue将为undefined,而不是null。所以你的功能体不起作用。

这里的另一个巨大的问题,我只能指望一个错字,就是你setCurrent应该function

我不明白你帖子末尾的问题,但这会表现得很好:

this.setCurrent = function (intValue) {
   if (!intValue) {
     this.current = 0;
   }
   else {
     this.current = intValue;
   }
};

如果确实想要检查是否传入参数,那么唯一可靠的方法是检查arguments.length:

this.setCurrent = function (intValue) {
   if (arguments.length === 0) {
     this.current = 0;
   }
   else {
     this.current = intValue;
   }
};

但这对我来说似乎毫无意义。如果该值是假的,那么它显然已经为0或者它不是有效的数值。

答案 1 :(得分:1)

使用typeofangular.isUndefined(intValue)而非null :-)

this.setCurrent = function (intValue) {
       if (typeof intValue=='undefined') { //if(angular.isUndefined(intValue))
         this.current = 0;
       }
       else {
         this.current = intValue;
       }
    };

以更好的方式: - )

  this.setCurrent = function (intValue) {
           if (typeof intValue!='undefined') { //if(!angular.isUndefined(intValue))
             this.current = intValue;
           }
        };

答案 2 :(得分:1)

您可以使用角度提供的方法检查变量是否未定义,即angular.isDefined() / angular.isUndefined()(首选检查角度方式)

this.setCurrent = function (intValue) {
   if (angular.isDefined(intValue)) {
     this.current = 0;
   }
   else {
     this.current = intValue;
   }
};

希望这可以帮助你,谢谢。

答案 3 :(得分:1)

您可以使用三元||操作者...

app.controller('GalleryController', function(){
    this.current = 0;
    this.setCurrent = function(pas_value) {
      this.current = pas_value || 0;
    };
  });

答案 4 :(得分:0)

我想出了另外一种方法:

app.controller('GalleryController', function(){
    this.current = 0;
    this.setCurrent = function(intValue){
      this.current = intValue || 0;
    };

答案 5 :(得分:0)

<div ng-controller="ShellController as vm">
<header class="clearfix">
    <ht-top-nav navline="vm.navline"></ht-top-nav>
</header>
<section id="content" class="content">
    <!--<div ng-include="'app/layout/sidebar.html'"></div>-->
    <div ui-view></div>
    <div class="ib-loading">Loading ...</div>
</section>
</div>