具有初始数据的服务的角度刷新范围

时间:2016-07-21 12:41:29

标签: javascript angularjs

我有一个服务将静态JSON数据保存到$scope变量,如下所示:

$scope.workout = Workouts.get(id);

我使用$scope.workoutshift()操纵此slice()。当我尝试将$scope.workout设置为来自服务的初始数据时,这不起作用。

$scope.workout = Workouts.get(id);

$scope.workout已更改。我认为另一个服务调用会刷新数据?我错了吗?如何获取服务中保存的初始数据?

5 个答案:

答案 0 :(得分:1)

可以采用1种解决方法,将您的$scope.workout复制到另一个对象并将其分配回$scope.workout

$scope.workout = Workouts.get(id);

var copyObj = angular.copy($scope.workout);

答案 1 :(得分:1)

如果您将其用于编辑功能,请复制该对象以进行编辑,这样就不会影响原始内容。

.alert {
 position: relative;
}

在保存功能中,通过合并对象来提交更改。

$scope.workoutTarget = Workouts.get(id);
$scope.workout = angular.copy($scope.workout);

//you're free to make edits to $scope.workout without affecting the service

现在angular.merge($scope.workoutTarget, $scope.workout) 将对其应用修改。

答案 2 :(得分:0)

虽然我不确定你的代码在哪里出错(我在AngularJS上并不是那么棒!)你可以使用的快速黑客是: 将初始数据分配给新的范围变量然后从我们的新范围变量中分配锻炼变量。现在我们可以随时从我们的新变量中刷新锻炼。

答案 3 :(得分:0)

object引用类型。那么为什么从service返回它,它会返回reference。这意味着你有2 reference到同一个对象(来自服务和范围)。因此,如果您从一个引用更改对象,它也将被更改为另一个引用。
你需要复制你的对象。 只需你可以通过

来做到这一点
angular.copy(Workouts.get(id), $scope.workout);

在控制器中使用$scope.workout

答案 4 :(得分:-1)

您可以尝试使用$ route.reload来刷新注入的数据。