我有一个控制器
function TestCtrl($scope)
{
var contentFromJson = 'Hi! this is <b>Bold</b> and <i>Italic</i>';
var dateFromJson = '/Date(1394526738123)/';
$scope.Date = dateFromJson;
$scope.Content = contentFromJson;
}
和标记
<div ng-app>
<div ng-controller="TestCtrl">
Date is {{Date | date : 'MMM d, y'}}
<p>{{Content}}</p>
</div>
</div>
我希望将日期解析为 MMM d,y ,但问题是json的结果日期是这样的 /日期(000000000)/ 我不知道格式的名称。 :)而且,html标签打印为纯文本..
检查此jsFiddle以进行测试
提前致谢..
答案 0 :(得分:3)
正在发生的事情是,您正在尝试使用其中的'/ Date()/'文本解析Date。所以你必须首先提取数字,然后使用过滤器。
控制器:
function TestCtrl($scope)
{
var contentFromJson = 'Hi! this is <b>Bold</b> and <i>Italic</i>';
var dateFromJson = '/Date(1394526738123)/';
var regexPattern = /\d+/g;
$scope.Date = dateFromJson.match(regexPattern)[0];
$scope.Content = contentFromJson;
}
至于html。使用ng-bind-html-unsafe(angularjs 1.1.1)
<div ng-app>
<div ng-controller="TestCtrl">
Date is {{Date | date : 'MMM d, y'}}
<p ng-bind-html-unsafe="Content"></p>
</div>
</div>
jsfiddle:http://jsfiddle.net/9NBLB/
编辑,这是另一种方式:
https://stackoverflow.com/a/2316066/769083
$scope.Date = new Date(parseInt(dateFromJson.substr(6)));
修改强>
初始化应用和控制器:
var app = angular.module('MyApp', []);
app.controller('TestingCtrl', ['$scope', function ($scope) {
$scope.Content =
[
{ Date : '/Date(1394526738123)/', Message : 'Hi! <b>Bold</b>' },
{ Date : '/Date(1394526738143)/', Message : 'Hi! <i>Italic</i>' }
];
$scope.ParseDate = function (dt) {
return new Date(parseInt(dt.substr(6)));
}
}]);
自定义指令使用$observe
读取属性值,然后使用element.html()
写出html:
app.directive("showHtml", function() {
return {
restrict: 'A',
scope: {showHtml: '@'},
link: function(scope, element, attrs) {
attrs.$observe('showHtml', function() {
element.html(scope.showHtml);
});
}
}
});
HTML:
<div ng-app="MyApp">
<div ng-controller="TestingCtrl">
<div ng-repeat="content in Content">
Message: <span show-html="{{content.Message}}"></span> <br />
Date: {{ParseDate(content.Date) | date : 'MMM d, y'}} <br /><br />
</div>
</div>
</div>
jsfiddle:http://jsfiddle.net/fXE5d/6/
答案 1 :(得分:1)
看起来你必须先评估JSON日期字符串。
$scope.Date = eval(dateFromJson.match(/\/(.*)\//)[1]);
答案 2 :(得分:1)
使用像momentjs这样的库来处理解析。请看这里的小提琴:http://jsfiddle.net/ahchurch/vkNk2/3/
<div ng-app>
<div ng-controller="TestCtrl">
Date is {{Date | date : 'MMM d, y'}}
<p>{{Content}}</p>
</div>
</div>
function TestCtrl($scope)
{
var contentFromJson = 'Hi! this is <b>Bold</b> and <i>Italic</i>';
var dateFromJson = '/Date(1394526738123)/';
$scope.Date = moment(dateFromJson).valueOf();
$scope.Content = contentFromJson;
}