【问题标题】:Angular passes variable as undefined to functionAngular将变量作为未定义传递给函数
【发布时间】:2015-03-04 22:50:54
【问题描述】:

我正在 MEANJS 之上构建一个应用程序。这是我的看法:

<section data-ng-controller="PostsController" data-ng-init="findOne()">
...
    <span data-ng-controller="FavsController" ng-init="isFaved(post._id)">
        <button type="button" ng-hide="faved[post._id]"></button>
    </span>
...
</section>

这是我位于FavsController的函数:

$scope.isFaved = function(postId) {
    console.log(postId);
    // other stuff. create an array named faved etc.
};

问题是,post._id 作为undefined 传递给函数。但是当我在我的视图中输入 {{ post._id }} 时,它会打印当前的帖子 ID,无论在 html 中的哪个位置。当我通过键入(我的意思是 isFaved(123))提供帖子 ID 时,它正在工作,并且内部按钮的 ng-hide 也正常工作。我正在使用相同的html 和相同的js 以及其他一些视图,但只有这个会引发错误。任何想法为什么会发生这种情况?

【问题讨论】:

  • post._id 存在于 FavsController 初始化中?你能提供初始化后的代码吗?如果您可以为该问题提供 Splnkr 或 Jsfiddle,它可能更容易解决。
  • @OrGuz 不,它在 FavsController 启动时不存在,这从来都不是问题。我不确定如何在 JsFiddle 上设置所有这些。
  • 您可能在 angular 处理完值之前尝试使用 post._id。
  • @marcieng 您说它在 FavsController 初始化时不存在,但您希望 ng-init 使用不存在的项目调用 isFaved?我想这就是它未定义的原因。您在哪里创建帖子?
  • @codebob 可能是对的。 ngInit 只执行一次,并且 ngHide 在每个摘要处更新。所以执行 ngInit 时可能没有设置该值。

标签: javascript angularjs meanjs


【解决方案1】:

ng-init 非常适合预先设置值,旨在用于 ng-repeat 内的属性别名。
您真正想要的是将函数调用与适当的事件联系起来,例如...

ng-click="isFaved(post._id)"

或者初始化控制器中的值或变量,这样您就可以确保它们将与值一起存在。在这种情况下使用 ng-init 并不是真正的预期,因此您可以期待意外。

【讨论】:

  • 很高兴你得到了照顾。
猜你喜欢
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 2023-03-24
  • 2012-06-24
  • 1970-01-01
  • 2020-12-04
  • 2015-07-02
  • 1970-01-01
相关资源
最近更新 更多