gpt4 book ai didi

angularjs - 在 Controller 中使用时工厂不保留数据

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

我有一间厂房

'使用严格';

myApp
.factory('House', [ '$http', '$location', '$rootScope', function($http, $location, $rootScope){

var numberOfDoors;

return {

loadHouse: function(){
numberOfDoors = 1;
},

numberOfDoors: numberOfDoors


};
}]);

我有一个 Controller 所有者

myApp
.controller('OwnerCtrl', ['$rootScope', '$scope', '$location', 'House', function($rootScope, $scope, $location, House) {


$scope.buildMe = function() {

//use value from house
var sayHelloToDoors = House.numberOfDoors;

};
}]);

如果我在其他 Controller 中运行函数 House.loadHouse() 来设置变量 numberOfDoors - 我确实设置了它,但是当我切换到页面重用该号码,我在 Owner Controller 中收到一条 undefined 消息。

为什么该值被清除?看起来 House 的另一个实例已被转移。有人可以帮忙吗?

最佳答案

这是因为您将私有(private) numberOfDoors 值分配给工厂中的 numberOfDoors 字段。

// This following snippet ...

myApp.factory('house', function() {
var numberOfDoors;

return {
numberOfDoors: numberOfDoors
};
});

// ... will actually become

myApp.factory('house', function() {
var numberOfDoors; // === undefined

return {
numberOfDoors: undefined
};
});

即使您为私有(private) numberOfDoors 分配一个初始值,它也不会按照您希望的方式运行。

myApp.factory('house', function() {
var numberOfDoors = 123;

return {
loadHouse: function() {
numberOfDoors = 1; // will change the private variable
// not the exposed object variable
},
numberOfDoors: numberOfDoors // will always be 123
};
});

完成这项工作的最简单方法是执行以下操作:

myApp.factory('house', function() {

return {
reset: function() {
this.numberOfDoors = 0;
},
numberOfDoors: 0
};

});

您可以在此处进行实际操作plunker .

编辑:

要封装门的数量,您可以执行以下操作:

myApp.factory('house', function() {

var _numberOfDoors = 0;

return {
reset: function() {
_numberOfDoors = 0;
},
numberOfDoors: function(value) {

if(value!==undefined) {
_numberOfDoors = value;
}

return _numberOfDoors;
}
};

});

现在,您可以通过 Controller :

var count = house.numberOfDoors(); // Get the numberOfDoors
house.numberOfDoors(++count); // Set the numberOfDoors

关于angularjs - 在 Controller 中使用时工厂不保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006222/

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