Javascript 角度:范围变量

Javascript 角度:范围变量,javascript,angularjs,Javascript,Angularjs,我有一个代码取自ng手册: <!doctype html> <html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.js"></script> </head> <body> <div ng-controller="MyController">

我有一个代码取自ng手册:

<!doctype html>
<html ng-app>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.js"></script>
</head>
<body>
    <div ng-controller="MyController">
        <h1>Hello {{ clock.now }}!</h1>
    </div>
    <script type="text/javascript">
    function MyController($scope) {
        var updateClock = function() {
            $scope.clock.now = new Date();
        };
        setInterval(function() {
            $scope.$apply(updateClock);
        }, 1000);
        updateClock();
    };
    </script>
  </body>
</html>

你好{{clock.now}!
函数MyController($scope){
var updatelock=function(){
$scope.clock.now=新日期();
};
setInterval(函数(){
$scope.$apply(updatelock);
}, 1000);
updatelock();
};
我是这样解决的:

<!doctype html>
<html ng-app>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.js"></script>
</head>
<body>
    <div ng-controller="MyController">
        <h1>Hello {{ clock }}!</h1>
    </div>
    <script type="text/javascript">
    function MyController($scope) {
        var updateClock = function() {
            $scope.clock = {'now': new Date()};
        };
        setInterval(function() {
            $scope.$apply(updateClock);
        }, 1000);
        updateClock();
    };
    </script>
  </body>
</html>

你好{{时钟}!
函数MyController($scope){
var updatelock=function(){
$scope.clock={'now':新日期()};
};
setInterval(函数(){
$scope.$apply(updatelock);
}, 1000);
updatelock();
};
我的问题是为什么第一个代码不起作用


更新:更新了第二个代码。

因为第一个示例中的时钟对象上没有'now'属性

因为第一个示例中的时钟对象上没有'now'属性

使用
$scope.clock.now=new Date()
您现在正试图将属性
设置为未定义的对象(
时钟
)。使用
$scope.clock={'now':new Date()}
时钟设置为对象,然后指定属性。详细的方式是:

$scope.clock = {}; 
$scope.clock.now = 'value';

使用
$scope.clock.now=new Date()
您现在正试图将属性
设置为未定义的对象(
时钟
)。使用
$scope.clock={'now':new Date()}
时钟设置为对象,然后指定属性。详细的方式是:

$scope.clock = {}; 
$scope.clock.now = 'value';
Date的now()方法是一个静态方法,因此可以这样说:

<div ng-controller="MyController">
    <h1>Hello {{ clock.now() }}!</h1>
</div>
<script type="text/javascript">
function MyController($scope) {
    var updateClock = function() {
        $scope.clock = Date;
    };

你好{{clock.now()}}!
函数MyController($scope){
var updatelock=function(){
$scope.clock=日期;
};
如果你真的想调用date对象的now方法,它会给你毫秒。

date的now()方法是一个静态方法,所以你可以这样说:

<div ng-controller="MyController">
    <h1>Hello {{ clock.now() }}!</h1>
</div>
<script type="text/javascript">
function MyController($scope) {
    var updateClock = function() {
        $scope.clock = Date;
    };

你好{{clock.now()}}!
函数MyController($scope){
var updatelock=function(){
$scope.clock=日期;
};

如果您真的想调用date对象的now方法,它将给您毫秒时间。

第一个代码不起作用,因为没有定义$scope.clock(Angular引发错误:TypeError:无法设置未定义的属性“now”)

那么这个

$scope.clock.now = new Date();
应该是这样的:

$scope.clock = {};
$scope.clock.now = new Date();
或者像你解决的那样:

$scope.clock = {now: new Date()}

第一个代码不工作,因为没有定义$scope.clock(Angular引发错误:TypeError:无法设置未定义的属性“now”

那么这个

$scope.clock.now = new Date();
应该是这样的:

$scope.clock = {};
$scope.clock.now = new Date();
或者像你解决的那样:

$scope.clock = {now: new Date()}

啊,我明白了,这个解释仍然适用。我会修改它。我明白了,这个解释仍然适用。我会修改它。不用担心,你现在已经改变了你的问题,所以我的答案看起来很愚蠢:)它仍然有效。它回答了为什么……其他答案只是更“完整”:)不用担心,你现在已经改变了你的问题,所以我的答案是ks Study:)它仍然有效。它回答了原因。。其他答案更“完整”:)我怀疑
{{clock.now()}}
会导致最大摘要迭代错误。Angular在没有
$watch
表达式(
{}
是隐藏的
$watch
时完成摘要周期与上一次摘要迭代相比,给出了不同的值。因为
clock.now()
每次检查时都会给出不同的值,摘要未完成(最多10次迭代->错误).这是一个很好的观察结果。当我把它放在一起并在Firefox中试用时,它没有任何问题,但是ymmv。我不认为这是他试图做的事情的解决方案,只是一个关于正在发生的事情的注释。我怀疑
{{clock.now()}
将导致最大摘要迭代错误。Angular在没有
$watch
表达式(
{{}}
是隐藏的
$watch
)时完成其摘要循环,与上一个摘要迭代相比给出了不同的值。因为
clock.now()
每次检查时都会给出一个不同的值,digest with not complete(最多10次迭代->error)。这是一个很好的观察结果。当我把它放在一起并在Firefox中试用时,它没有任何问题,但ymmv。我不认为这是他试图做的事情的解决方案,只是对正在发生的事情的一个说明。