2017-01-05 24 views
9

W dość skomplikowanej, kanciastej aplikacji internetowej, potrzebuję dynamicznego roku, aby pokazać się w stopce, która nie ma dyrektywy. Czy jest jakiś kątowy sposób na zrobienie tego przy użyciu tylko {{SomeDateFunction()}}?jak uzyskać bieżący rok w Angular 1 używając tylko {{}}?

Widziałem ludzi, którzy mówią: {{Date.now() | date:'yyyy'}}, która niczego nie wyświetla. Próbowałem {{new Date().getFullYear()}} który łamie kanciasty i błąd mówi

Syntax Error: Token 'Date' is an unexpected token at column 5 of the expression [new Date().getFullYear()] starting at [Date().getFullYear(].

Nie chcę połączyć zakres od zakresu korzeni, lub umieścić to w dyrektywie tylko na rok, jest to dokładnie to, co wyrażeń {{}} powinno być w stanie rozwiązać, a proste i niezwiązane z datami proste wyrażenia {{}} są w porządku.

+2

Myślę, że źle rozumiesz, do czego służą wyrażenia kątowe. nie wykonują one arbitralnego JavaScript, wiążą się z właściwościami w '$ scope'. jeśli masz właściwość '$ scope' która jest funkcją, wykonają tę funkcję. – Claies

+2

https://docs.angularjs.org/guide/expression 'Date' jest członkiem obiektu' window'. Wyrażenia kątowe nie używają 'eval', a zatem nie wystawiają obiektu' window' na wyrażenia. Będziesz musiał spojrzeć na odpowiedź 'squiroid's' poniżej, aby znaleźć uzasadnione rozwiązanie. –

+0

Sądzę, że myląc wyrażenia z funkcjami, dziękuję za wgląd. – Bronanaza

Odpowiedz

13

Musisz zdefiniować obiekt daty wewnątrz kontrolera na zasięgu.

$scope.date = new Date(); 

A potem w świetle zrobić

{{date| date:'yyyy'}} 
+1

to nie jest to, co chciałem usłyszeć, ale dziękuję za potwierdzenie. – Bronanaza

2

Jest dość późno na odpowiedź i mam nadzieję, że już dostał odpowiedź. Podając odpowiedź dla dobra każdego człowieka, -

(function(angular) { 
 
    'use strict'; 
 
    var app = angular.module("myApp", []); 
 
    app.controller('dateController', function($scope) { 
 
    $scope.SomeDateFunction = function() { 
 
     var currentdate = new Date(); 
 
     return currentdate.getFullYear(); 
 
    } 
 
    }); 
 
})(window.angular);
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script data-require="[email protected]" data-semver="1.6.4" src="https://code.angularjs.org/1.6.4/angular.min.js"></script> 
 
    <script src="script.js"></script> 
 
</head> 
 

 
<body ng-app="myApp"> 
 
    <div ng-controller="dateController"> 
 
    <h1>Hello World!</h1> &copy; this is copyright protected as of {{SomeDateFunction()}} 
 
    </div> 
 
</body> 
 

 
</html>

powinien dostać to, co chcesz.