Angular - 将范围值保存到变量,但在范围更新时不更新它

时间:2015-04-27 10:43:20

标签: javascript angularjs scope

我有这样的事情:

$scope.last_good_configuration = $scope.storage;

在$ scope.last_good_configuration中,我保留了最后的好设置。

当用户键入输入的错误值时,例如我想要的大整数:

$scope.storage = $scope.last_good_configuration;

但我的$ scope.last_good_configuration一直与$ scope.storage相同。如何停止更新$ scope.last_good_configuration?我必须以某种方式评估我的范围?

3 个答案:

答案 0 :(得分:6)

您需要复制或克隆原始对象。 Angular有一个内置的方法:angular.copy

$scope.last_good_configuration = angular.copy($scope.storage);


//Edits must be at least 6 characters workaround

答案 1 :(得分:4)

您可以使用angular.copy()创建新对象,因此当您对public boolean onPrepareOptionsMenu(android.view.Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_settings).setVisible(!drawerOpen); Button settBtn = (Button) findViewById(R.id.action_settings); settBtn.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") public void onClick(View v) { CustomDialogFragment dialog = new CustomDialogFragment(); dialog.show(getSupportActionBar(), "dialog"); } }); return super.onPrepareOptionsMenu(menu); } public class CustomDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = new Dialog(getActivity()); dialog.getWindow().getAttributes().windowAnimations = R.style.Animation_CustomDialog; dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); dialog.setContentView(R.layout.dialog_custom); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.setCanceledOnTouchOutside(false); TextView message = (TextView) dialog.findViewById(R.id.message); message.setText(">>>>>>>"); dialog.findViewById(R.id.positive_button).setOnClickListener(new View.OnClickListener() { public void onClick(View v) { dismiss(); } }); dialog.findViewById(R.id.close_button).setOnClickListener(new View.OnClickListener() { public void onClick(View v) { dismiss(); } }); return dialog; } } 进行更改时,它不会影响storage

last_good_configuration

答案 2 :(得分:2)

由于对象是通过引用传递的,因此您需要创建一个 new 对象来存储默认配置。否则,当您修改$scope.last_good_configuration时,它也会影响$scope.storage,因为它们两者都指向同一个对象。

使用angular.extend方法将$scope.storage中的所有属性复制到新对象{}中:

$scope.last_good_configuration = angular.extend({}, $scope.storage);

UPD。我完全忘记了专用的angular.copy,在这种情况下可能更合适,特别是$scope.storage具有嵌套的对象结构:angualar.extend将做一个浅的副本,在这种情况下你应该使用{{ 1}}(见Satpal回答)。