Angularjs 用于显示日期的角度指令

Angularjs 用于显示日期的角度指令,angularjs,Angularjs,我正在写一个角度指令,它将在2012年10月11日星期四生效 到目前为止,我的尝试看起来是这样的-myApp已经定义:也处于启用状态 但是at.datetime不会立即填充,所以我会通过未定义的发送,而视图更改为无效日期 我确信指定单向绑定和重新评估更改是有困难的,但是我很难遵循文档!我应该怎么做呢?除非您使用的是Angular的某个奇怪版本,否则您的代码根本不应该工作,因为模块的第二个参数是必需的: angular.module('myApp', []); // this creates an

我正在写一个角度指令,它将在2012年10月11日星期四生效

到目前为止,我的尝试看起来是这样的-myApp已经定义:也处于启用状态

但是at.datetime不会立即填充,所以我会通过未定义的发送,而视图更改为无效日期

我确信指定单向绑定和重新评估更改是有困难的,但是我很难遵循文档!我应该怎么做呢?

除非您使用的是Angular的某个奇怪版本,否则您的代码根本不应该工作,因为模块的第二个参数是必需的:

angular.module('myApp', []); // this creates an app (setter)

angular.module('myApp'); // this creates gives you a reference to an already created app (getter)
除非您已经定义了myApp(我假设您还没有定义),否则您上面的代码将无法工作。定义模块时,第二个参数需要依赖项列表:

angular.module('myApp', []); // this creates an app (setter)

angular.module('myApp'); // this creates gives you a reference to an already created app (getter)
否则,您的代码似乎工作正常:

也就是说,根据您正在做的事情或者我不知道时间标记是什么,创建一个元素指令而不是名为time的属性指令可能更有意义

更新:根据上面的Fiddler,当您定义一个模块时,您的ngApp指令需要指向该命名模块。唯一有效的方法是采用更简单的方法,仅使用控制器功能,如:

HTML

编辑

根据对问题的更改,由于您现在使用的是元素指令,因此需要从不同的位置提取日期。正如Mark在上面的评论中所建议的,该位置是scope.temporal:

但是在指令中直接引用temporal并不能真正使其可重用,因此,您希望更进一步,使用$watch间接引用值并对其进行跟踪:

记下我的console.log语句。在调试时,了解范围内和处的内容非常有帮助。

除非您使用的是Angular的某个奇怪版本,否则您的代码根本不应该工作,因为模块的第二个参数是必需的:

angular.module('myApp', []); // this creates an app (setter)

angular.module('myApp'); // this creates gives you a reference to an already created app (getter)
除非您已经定义了myApp(我假设您还没有定义),否则您上面的代码将无法工作。定义模块时,第二个参数需要依赖项列表:

angular.module('myApp', []); // this creates an app (setter)

angular.module('myApp'); // this creates gives you a reference to an already created app (getter)
否则,您的代码似乎工作正常:

也就是说,根据您正在做的事情或者我不知道时间标记是什么,创建一个元素指令而不是名为time的属性指令可能更有意义

更新:根据上面的Fiddler,当您定义一个模块时,您的ngApp指令需要指向该命名模块。唯一有效的方法是采用更简单的方法,仅使用控制器功能,如:

HTML

编辑

根据对问题的更改,由于您现在使用的是元素指令,因此需要从不同的位置提取日期。正如Mark在上面的评论中所建议的,该位置是scope.temporal:

但是在指令中直接引用temporal并不能真正使其可重用,因此,您希望更进一步,使用$watch间接引用值并对其进行跟踪:

记下我的console.log语句。在调试时了解作用域和at中的内容非常有帮助。

所以我知道at是什么,我习惯于将其视为attrs

在中,由于要将作用域属性指定为指令属性值

<time datetime="temporal">it hasn't rendered</time>
所以我搞清楚了我习惯于把它看作是属性

在中,由于要将作用域属性指定为指令属性值

<time datetime="temporal">it hasn't rendered</time>

改用过滤器。内置日期过滤器:将为您处理此问题


请参阅上面的angularjs文档链接,了解所有格式选项

改用过滤器。内置日期过滤器:将为您处理此问题


请参阅上面的angularjs文档链接,了解所有格式选项

此处是否涉及模型?你能分享一个plunker吗,Fiddle?我没有使用模型,因为我只希望视图随着数据的变化而变化,而不是双向绑定。我试图把它编成小提琴,但我失败得很惨。这就是我目前所处的位置:@JP你需要在那把小提琴中使用ng app=myApp-你的console.log语句从未执行过,因为它没有在正在使用的Angular应用程序中定义。很好!希望新的编辑将展示我的原始问题:我不知道at.datetime是什么,但是el.textnew Datescope.temporal.toDateString做了你想要的吗?这里涉及到模型吗?你能分享一个plunker吗,Fiddle?我没有使用模型,因为我只希望视图随着数据的变化而变化,而不是双向绑定。我试图把它编成小提琴,但我失败得很惨。这就是我目前所处的位置:@JP你需要在那把小提琴中使用ng app=myApp-你的console.log语句从未执行过,因为它没有在正在使用的Angular应用程序中定义。很好!希望新的edi
t将演示我的原始问题:我不知道at.datetime是什么,但是el.textnew Datescope.temporal.toDateString是否可以满足您的需要?感谢您的更正-我还不习惯将代码放到一个小地方!我已经意识到为什么我的问题看起来很奇怪——我已经更新了上面的文字。我终于弄明白了at是什么。在看到您的更新之前,我删除了我的评论,但我会将其添加回去,以便人们可以跟随。这正是我要找的:谢谢!谢谢你的更正-我还不习惯把我的代码弄得一团糟!我已经意识到为什么我的问题看起来很奇怪——我已经更新了上面的文字。我终于弄明白了at是什么。在看到您的更新之前,我删除了我的评论,但我会将其添加回去,以便人们可以跟随。这正是我要找的:谢谢@如果temporal的值可能改变,Langdon使用$watch的答案+1优于$parse。@如果temporal的值可能改变,Langdon使用$watch的答案+1优于$parse。这一点非常好!我将坚持另一个答案,但这仅仅是因为我将在一段时间前把代码也放在那里。这是一个非常好的观点!我将坚持使用另一个答案——但这只是因为我将在一段时间前在其中添加代码。
.directive('time', function($parse) {
    return {
        restrict: 'E',
        link: function (scope, el, attrs) {
            var model = $parse(attrs.datetime);
            el.text((new Date(model(scope))).toDateString());
        }
    };
});
    <time datetime="temporal">{{temporal|date:'EEE MMM d yyyy'}}</time>