我有这样的事情:
$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?我必须以某种方式评估我的范围?
答案 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回答)。