在Angularjs Factory返回时调用其他函数

时间:2014-07-25 23:19:01

标签: angularjs

我有一家工厂:

.factory('PageType', function () {
   return{
     first: {
       firstFirst: {
         firstFirstFirst: this.second.secondFirst
       },
       firstSecond: "yoyo!"

     },
     second: {
        secondFirst: "hello!!!"
     }
   }
})

this.second.secondFirst无效,但this.secondFirst会有效。如何拨打second.secondFirst?我试过了PageType.second.secondFirst,但这是错误的。

1 个答案:

答案 0 :(得分:1)

所以你想在对象嵌套的两个点引用相同的值?为什么不在声明返回对象之前先将它分配给变量?

e.g。

myModule.factory('PageType', function () {
  secondFirst = "hello!!!";
  return {
    first: {
      firstFirst: {
        firstFirstFirst: secondFirst
      },
      firstSecond: "yoyo!"
    },
    second: {
      secondFirst: secondFirst
    }
  };
});

this.second.secondFirst之类的东西不会起作用,因为在那个范围内这指的是匿名函数,(除非你将它包装在另一个匿名函数中,该函数在直接父对象上被称为方法,但是此对象不知道将其作为值引用的祖父对象。 PageType.second.secondFirst也无法工作,因为工厂定义中的范围内没有PageType(仅在注入PageType的后续函数范围内)。

编辑:

此解决方案的一个变体是声明没有双引用的对象结构,然后在返回对象之前将它们作为单独的语句添加。

PageType = {
  foo: {
  }
};
PageType.foo.bar = PageType.baz = "hello";
return PageType;