使用angularJS参数从div调用函数

时间:2015-04-25 09:26:55

标签: javascript angularjs

我试图将毫秒转换为javascript日期:

<div ng-app>
  <div ng-controller="TodoCtrl">
    <div>
        <script type="text/javascript">
            parseDate({{test}})
        </script>
      </div>
  </div>
</div>

function TodoCtrl($scope) {
  $scope.test = "1429831430363"
}

function parseDate(date) {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

    return months[date.getUTCMonth()] + ' ' + date.getUTCDate();
}

http://jsfiddle.net/U3pVM/15141/

但是在控制台上抛出了错误Uncaught SyntaxError: Unexpected token {

使用angularJS参数从div调用函数的正确方法是什么?

4 个答案:

答案 0 :(得分:2)

使用此代码:请参阅fiddle

<div ng-app>
  <div ng-controller="TodoCtrl">
    <div>
      {{parseDate(test)}}
      </div>
  </div>
</div>


function TodoCtrl($scope) {
  $scope.test = "1429831430363"

    $scope.parseDate=function(date) {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

    return months[(new Date()).getUTCMonth()] + ' ' + (new Date()).getUTCDate();
   }
}

答案 1 :(得分:1)

格式化日期的更优雅的解决方案是创建自定义过滤器,因为它更干净,您可以在任何地方重复使用它:

过滤器:

myApp.filter('myMillisecondsToUTCDate', [function() {
    return function(milliseconds) {
        var date = new Date(milliseconds);
        var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                      'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
        return months[date.getUTCMonth()] + ' ' + date.getUTCDate();
    };
}]);

控制器:

myApp.controller('MyCtrl', function($scope, $filter) {
    $scope.testDate = 1429831430363;   
    // Re-Use the filter everywhere
    $scope.formattedDate = $filter('myMillisecondsToUTCDate')($scope.testDate);
});

HTML:

<div ng-controller="MyCtrl">
    Format a date using a custom filter: {{testDate | myMillisecondsToUTCDate}}<br/>
    Formatted date {{formattedDate}}
</div>

Check the demo fiddle

答案 2 :(得分:0)

您可以使用angular.elementjqLite.scope来获取范围对象。请注意,角度和您的应用需要初始化才能实现,因此您最好在回调中调用parseDate

parseDate(
  angular
    .element('[ng-controller="TodoCtrl"]') // but you'd rather give it an ID / class name / whatever
    .scope()
    .test
);

答案 3 :(得分:0)

修改代码:

  1. 我们不需要div中的脚本,因为它们仍然是单独评估的。

  2. 在angularjs控制器中定义了parseDate,如果这是非常通用的,请将其定义为服务/工厂并在任何地方使用它。这是有角度的方式。

  3. 您的测试是一个字符串。它没有getUTCMonth函数,它应该是一个数字,以便它可以转换为日期,以便我们可以使用上述函数。

  4. 以下是经过修改的代码:

        <div ng-app>
      <div ng-controller="TodoCtrl">
        <div>
                {{parseDate(test)}}
          </div>
      </div>
    </div>
    

    控制器:

    function TodoCtrl($scope) {
      $scope.test = 1429831430363;
      $scope.parseDate = function(date) {
      var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
      date = new Date(date);
      return months[date.getUTCMonth()] + ' ' + date.getUTCDate();
    }
    }
    

    看到这个小提琴:http://jsfiddle.net/U3pVM/15146/