我将模型放在Service中,我所有的模型都在一个对象中,我希望能够通过将模型重新分配给一个空对象来重置我的模型,但这似乎不起作用,但是如果我删除一个它直接做财产。
如何重置我的模型而不必删除每个属性,刷新页面或进行大的更改?
(function () {
var myApp = angular.module('myApp', []);
myApp.controller('MyController', function (MyService) {
var _this = this;
_this.model = MyService.model;
_this.myService = MyService;
_this.deleteInService = function () {
MyService.functions.resetModel();
};
});
myApp.service('MyService', function () {
var obj = {};
obj.model = {x: 1};
obj.functions = {};
obj.functions.resetModel = function () {
//delete obj.model.x; //THIS WORKS!
obj.model = {x: 1}; //BUT THIS DOESN'T :(
};
return obj;
});
})();
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
<script src="changingModelInService.js"></script>
</head>
<body ng-app="myApp" ng-controller="MyController as myCtrl">
{{myCtrl.model.x}}<div><input ng-model="myCtrl.model.x"/></div>
<button ng-click="myCtrl.deleteInService()">Delete X in service</button>
</body>
</html>
谢谢你。
编辑:做_this.model = MyService.model这是不可能的,因为我与许多控制器共享我的服务
我认为解决您的问题的一种方法是创建一个默认的模型变量(如master
副本),并angular.copy
在调用该方法时使用两个参数将模型重置为主版本。
请参阅此处的angular.copy
文档。您会注意到实时演示实际上显示了重置功能。
我已经更新了现场演示plunker表现出的行为,我认为你的愿望的http://plnkr.co/edit/BJ ...。
希望对您有所帮助!
更新::
虽然可能需要测试,但可能的实现方式如下:
myApp.service('MyService', function () {
var masterModel = {x: 1};
var obj = {
model: {x: 1},
functions: {
resetModel: function() {
angular.copy(masterModel, obj.model);
}
}
};
return obj;
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句