只有在未定义AngularJS时才通过

时间:2015-12-14 12:20:16

标签: javascript angularjs

在我的代码中,我将一个JSON对象数组从我的服务传递给我的控制器,然后传递给我的指令,然后进行可视化。

控制器中的代码:

(function(){

'use strict';

angular.module('dashboardApp').controller('DownloadCtrl', DownloadCtrl);

DownloadCtrl.$inject= ['DownloadService','$scope'];

function DownloadCtrl(DownloadService, $scope){
    var self=this;      

    DownloadService.getRoutes()
      .then(function(responseData){       
        self.routes = responseData.data;   

  });

}

})();

HTML code:

<div class="container" ng-controller="DownloadCtrl">    

    <donut-chart data='download.routes'></donut-chart>

</div>

指令代码:

angular.module('dashboardApp').directive('donutChart',function(){

    function link(scope,element,attr){
        var dataSet = scope.data;

        if(dataSet!==undefined){
            var chart = c3.generate({
                data: dataSet,
                type:'donut'
            });
        }
    };

    return {
        restrict: 'EA',
        link : link,
        scope: {
            data: '='       

        }
    };
});

如果我范围。$ watch $ scope.data我注意到它出现一次且没有分配数据,然后再次出现并分配了数据。如果我没有 dataSet!== undefiend ,那么代码就会失败。

它适用于当前的设置,但我觉得有一种更好的方法,而不仅仅是检查 dataSet!== undefined 。我想我可能会以不正确的顺序或以错误的方式做事。

我想要一种方法可以删除 dataSet!== undefiend

2 个答案:

答案 0 :(得分:2)

如果returnscope.data

,您应该从链接功能null {/ 1}}
function link(scope,element,attr){
    if(scope.data == null){
     return;
    }

    var dataSet = scope.data;

    var chart = c3.generate({
        data: dataSet,
        type:'donut'
    });

};

答案 1 :(得分:0)

不要在你的链接功能中使用return,因为阻止了添加更多业务逻辑的能力,在我看来是不可扩展的......

只需检查 public $validate = array( 'password' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A password is required' ), 'min_length' => array( 'rule' => array('minLength', '6'), 'message' => 'Password must have a mimimum of 6 characters' ) ), 'password_confirm' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'Please confirm your password' ), 'equaltofield' => array( 'rule' => array('equaltofield','password'), 'message' => 'Both passwords must match.' ) ), ) 是否不是 falsy 值,然后执行您需要的操作。 错误值包括:scope.datafalse0nullundefined

如果您对其中一个假值执行检查,则''语句不满足。

if