2 回答
TA贡献1820条经验 获得超2个赞
不随 AngularobjFlag
变化的原因cont.flag
与 Angular 无关。这是本机 Javascript 行为。
这个说法:
cont.obj = {objFlag: cont.flag, objFunction: cont.func};
只有一个初始分配cont.flag
值objFlag
和之间不存在正在进行的链路objFlag
和cont.flag
TA贡献1803条经验 获得超3个赞
让我们以其他方式思考您的代码
cont.flag = 0;
cont.obj = {objFlag: cont.flag, objFunction: cont.func};
cont.func = function() {}
这相当于
var cont = {
flag: 0,
obj: {objFlag: cont.flag, objFunction: cont.func},
func: function() {}
}
console.log(cont.obj);
您可以在cont此处看到未定义的结果(无法读取未定义的属性“标志”)。我们无法将变量访问到同一对象内的另一个变量中。
所以,你会想到在this这里使用
var cont = {
flag: 0,
obj: {objFlag: this.flag, objFunction: this.func},
func: function() {}
}
console.log(cont.obj);
同样,您将获得未定义的值,因为我们无法使用另一个变量访问对象元素。但是我们可以使用函数来访问它们。所以最后一个选择是使用 obj 的 getter 函数将带有其他变量数据的 json 返回到一个变量中。(在自引用 json 对象中)
var cont = {
flag: 0,
get obj() {return {objFlag: cont.flag, objFunction: cont.func}},
/*or*/
/* get obj() {return {objFlag: this.flag, objFunction: this.func}},*/
func: function() {}
}
console.log("Before change", cont.obj);
//change
cont.flag = 10;
console.log("After change", cont.obj);
更新
现在,将您的案例与上面的解释结合起来,cont控制器的参考在哪里,如何在角度控制器中添加 getter 属性。
Object.defineProperty方法就是你所需要的。所以你的最终代码将是:
cont.flag = 0;
Object.defineProperty(cont, 'obj', {
get: function() {
return {objFlag: cont.flag, objFunction: cont.func}
}
});
cont.func = function() {}
// you can access obj property to see the values
console.log(cont.obj)
添加回答
举报