gpt4 book ai didi

angularjs - 工厂流程。它是如何工作的

转载 作者:行者123 更新时间:2023-12-02 22:57:23 26 4
gpt4 key购买 nike

自从我开始使用 AngularJS 编写代码以来,我一直在使用工厂并发现它们非常有用。我认为它们是这样工作的(伪代码):

FACTORY NAMESPACE {
PRIVATE FIELDS AND FUNCTIONS
RETURN {
INTERFACES TO ACCESS PRIVATE DATA
}
}

我认为return中的表达式仅在直接访问时才会计算,但是,看来我没有理解正确。

我知道工厂和服务是 AngularJS 的底层,也许有人认为这个问题不应该在这里,因为它很微不足道,但是......

I created this plunk ,我试图找出为什么变量在工厂代码内部发生变化,从外部访问时不会保留其值,我发现的结果让我更加困惑,每个返回函数内部的代码都会在之前评估其他任何事情都不会在应该被调用的时候被调用(按照我的逻辑)!是。是这样设计的吗?如果是的话,为什么?

来自 plnkr 的片段

var myApp = angular.module('app',[])

myApp.factory('_gl', [function () {
// Private fields
var _x;

function _somefunc(){
// This function evaluates even before the code of 'ctrl'
_x = 6;
console.log("changed:"+ _x);
}

return {
x:_x,
changeX:_somefunc()
}
}]);

myApp.controller('ctrl', ['_gl', function (_gl) {
_gl.x=2;
console.log("x init: " + _gl.x);
_gl.changeX(); // This does nothing at all
console.log("x after change: " + _gl.x);
}]);

/* Expected output
x init: 2
changed: 6
x after change:6
/*

/* Actual output
x init: 2
changed:6
x after change: 2
*/
<小时/>

结果:

毕竟我从@dfsq那里发现了(正确的方法是使用getter和setter),我得出的结论是,虽然它会产生一些内存开销,但使用简单的JS全局变量对我来说会更好。

最佳答案

the code inside of every return functions evaluates before anything else

当然,因为使用_somefunc()执行它。

应该是:

return  {
x: _x,
changeX: _somefunc
}

注意,_somefunc后面不应该有(),它是调用运算符。您希望 changeX 成为对 _somefunc 的引用,而不是 _somefunc 执行的结果 (_somefunc())。

关于angularjs - 工厂流程。它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37081014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com