我最近加载了几个版本的MEANJS(MEANJS.org(,以更好地理解文件结构并查看更改。
在4.0中,articles.client.controller.js有:我可以在那里对新文章进行更改,因为我将新字段添加到猫鼬模式中。
$scope.create = function () {
// Create new Article object
var article = new Articles({
title: this.title,
content: this.content
});
在4.1中,它是这样出现的。
// Create new Article object
var article = new Articles({
title: this.title,
content: this.content
});
现在有了4.2,我在articles.client.controller.js、中看不到这一点
vm.article = article;
我有修改后的Schema版本。如何对新文章对象的创建进行更改?对于从4.0、4.1升级到4.2的应用程序来说,这是一个很好的问题。
略有变化。
尝试像在版本4中那样直接使用资源可能会导致页面已准备好但资源未准备好的问题(文章(。
为了解决这个问题,angular使用解决了哪些使用承诺来处理时间问题。
重要的是要知道,这个承诺会在未来的某个时候给你一些答案——只是,它可能不是你想要的答案!
无论哪种方式,一旦它有了答案,它总是告诉你——或者更正确地说,一旦它解决了问题。
Angular使用这些承诺来帮助解决上面提到的时间问题。解析被键控到promise,并且只有在解析后才会加载控制器。。。呃。。。决定
这意味着我们总是在期望的时候有文章。
承诺,决心-让我来吧-让我去吧
resolutions选项用于更新的articles.client.routes。在这里,我们看到articleResolve
被键控到getArticle
,这本身不是一个promise,而是一个返回一个(这只是一个好的!(的函数
如果我们看看下面的行,我们可以看到我们是如何创建这个promise返回函数的。它是一个使用Angular的$stateParams(检查状态(并填写请求文章的articleId的函数。我们使用注入的和熟悉的文章服务来获得文章。
在您的情况下,您想知道新文章是如何创建的,因此我们必须进一步了解最近更新的文章服务。
这与您习惯使用的Articles服务几乎相同,但是额外的行为该服务添加了一个额外的方法,允许它创建,或者如果存在,则保存文章详细信息。
这些行是我们如何在angular中扩展服务的,下面的实现基本上检查文章,看看它是否具有._id
属性。这是所有保存的mongo-db文档都得到的.id
属性的字符串表示形式。
它使用此信息调用适当的方法。
最后,回到我们开始的地方
在控制器中,我们看到前面创建的promise密钥articleResolve
用作第二个注入的参数;就好像在说"当你解析了这个文章服务时,当我注入参数时,把它用作第二个参数"。
当我们查看控制器定义时,我们注意到相应的第二个参数被命名为article。
背景
:在任何控制器内,this
实际指向作用域(或$scope(。按照惯例†,为了使角度中的东西看起来像标准JavaScript,我们经常说var that = this
,我们创建了一个变量来引用我们的范围
在控制器中,我们将本文附加到范围中,以便可以通过vm.article.在视图中访问它
Fin!
†当你有机会并慢慢发展你的代码风格以匹配它时,请参阅Papa John的风格指南。它将帮助你避免陷阱,并作为一种副作用,使许多有角度的代码示例/教程更容易理解,尤其是在作者也遵循它的情况下。