gpt4 book ai didi

javascript - 检查属性是否附加到 $scope

转载 作者:行者123 更新时间:2023-12-02 16:53:00 25 4
gpt4 key购买 nike

这个问题实际上包含两个:

1 - 函数是否在 javasript 中创建自己的 $scope?

e.g.$scope.foo = function() {
$scope.bar = "Bar";
}

我问这个问题是因为在我尝试运行的一个此类测试中,我检查以确定范围内是否存在变量,运行一个函数,然后重新检查:

 iit('getPatientFirstName should attach patientName to the scope', function() {
// Passes
expect(scope.patientName).toBeUndefined();
spyOn(scope,'getPatientFirstName').andCallThrough();
scope.getPatientFirstName(detailsBody);

// Fails
expect(scope.patientName)not.toBeUndefined();
});

// In the controller
$scope.getPatientFirstName = function (dataBody) {
$scope.patientName = dataBody.patientFirstName;
};

所以这表明他们可能有自己的范围?如果是这种情况,我们可以测试一下吗?

2 - 是仅使用函数外部存在的对象的有效替代方案:

 $scope.patientDetails = {
patientName: ''
};

$scope.getPatientFirstName = function (dataBody) {
$scope.patientDetails.patientName = dataBody.patientFirstName;
};

谢谢

编辑考虑到这两个答案提出了另一个问题 - 如果变量(属性或对象)附加到 $scope,是否被视为全局变量?它可以在该 Controller 中的任何函数中访问,但就在完全不同的 Controller 中调用而言 - 是的,可以吗?

确认/否认任何人?

看来,对于我的测试而言,将变量分配给 $scope 全局被认为是有效的。

最佳答案

关于你的第一个问题,,函数不会自己创建新的$scopes(请注意,我们正在谈论范围和不是闭包,这是两个不同的概念)。

在您的示例中,$scope.foo 函数在 $scope 对象上创建一个新的 bar 属性,其中 foo已定义。最终的 $scope 对象看起来像这样:

$scope {
foo: function() {
$scope.bar = "Bar";
},
bar: "Bar"
}

您的测试问题可能与 not 之前缺少 . 有关。

expect(scope.patientName).not.toBeUndefined();

Is a valid alternative just to use an object that exists outside the function:

是的,您可以使用在函数外部定义的对象。

如果该对象位于同一个 $scope 对象上,则不会有任何问题,只需确保在运行该函数之前定义它,否则您将得到一个$scope. PatientDetails 未定义错误。

关于javascript - 检查属性是否附加到 $scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421106/

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