Javascript Factory阵列可以推送,但不能替换
我有这个工厂 DatosFactory.jsJavascript Factory阵列可以推送,但不能替换,javascript,angularjs,Javascript,Angularjs,我有这个工厂 DatosFactory.js (function() { 'use strict'; angular.module('InmoManager') .factory('DatosFactory', function($http, $location) { var datos = { propiedadesFiltradas: [] } ... datos.get
(function() {
'use strict';
angular.module('InmoManager')
.factory('DatosFactory', function($http, $location) {
var datos = {
propiedadesFiltradas: []
}
...
datos.getPropiedadesFiltradas = function(){
return datos.propiedadesFiltradas;
}
datos.setPropiedadesFiltradas = function(data){
datos.propiedadesFiltradas.length = 0;
datos.propiedadesFiltradas.push(data);
}
return datos;
})
})();
(function() {
'use strict';
angular.module('InmoManager')
.controller('SidebarController', function($http, $scope, DatosFactory) {
var sidebarCtrl = this;
sidebarCtrl.toggleSidebar = function(){
$('#wrapper').toggleClass('toggled');
}
sidebarCtrl.propiedades = DatosFactory.getPropiedadesFiltradas();
});
})();
这个控制器
SidebarController.js
(function() {
'use strict';
angular.module('InmoManager')
.factory('DatosFactory', function($http, $location) {
var datos = {
propiedadesFiltradas: []
}
...
datos.getPropiedadesFiltradas = function(){
return datos.propiedadesFiltradas;
}
datos.setPropiedadesFiltradas = function(data){
datos.propiedadesFiltradas.length = 0;
datos.propiedadesFiltradas.push(data);
}
return datos;
})
})();
(function() {
'use strict';
angular.module('InmoManager')
.controller('SidebarController', function($http, $scope, DatosFactory) {
var sidebarCtrl = this;
sidebarCtrl.toggleSidebar = function(){
$('#wrapper').toggleClass('toggled');
}
sidebarCtrl.propiedades = DatosFactory.getPropiedadesFiltradas();
});
})();
使这项工作成功
pageSidebar.html
<li class="item" ng-repeat="propiedad in sidebarCtrl.propiedades[0] | orderBy:'titulo'">
到
还有这个
datos.setPropiedadesFiltradas = function(data){
datos.propiedadesFiltradas.length = 0;
datos.propiedadesFiltradas.push(data);
}
到
但是当我这样做时,变量
sidebarCtrl.propiedades
get是未定义的(当我调用datos.setPropiedadesFiltradas()时不会更新)
当您重新分配datos.propiedadesfilteradas=data;
您中断了对象引用,因此datos.propiedadesfilteradas
不再指向对象角度设置绑定
另一方面,推送对象时,对象引用保持不变,Angular的更改跟踪引擎可以检测更改并重新渲染视图
还有一件事。我建议您使用指令而不是$('#wrapper')。toggleClass('toggled');
:
和HTML格式
<div id="wrapper" ng-class={toggled: toggle}>...</div>
。。。
重新指定datos.propiedadesfilteradas=data;
会中断对象引用,因此datos.propiedadesfilteradas
不再指向对象角度设置绑定
另一方面,推送对象时,对象引用保持不变,Angular的更改跟踪引擎可以检测更改并重新渲染视图
还有一件事。我建议您使用指令而不是$('#wrapper')。toggleClass('toggled');
:
和HTML格式
<div id="wrapper" ng-class={toggled: toggle}>...</div>
。。。
由于dfsq答案,我假设我想要的一切都不可能实现,但我找到了这个“局部”解决方案
在工厂中使用此选项:
datos.setPropiedadesFiltradas = function(data){
datos.propiedadesFiltradas.length = 0;
datos.propiedadesFiltradas.push.apply(datos.propiedadesFiltradas,data);
}
我可以改变这一点:
ng-repeat="propiedad in sidebarCtrl.propiedades[0]"
ng-repeat="propiedad in sidebarCtrl.propiedades[0]"
到
因为dfsq的答案,我假设我想要的一切都不可能,但我找到了这个“局部”解决方案 在工厂中使用此选项:
datos.setPropiedadesFiltradas = function(data){
datos.propiedadesFiltradas.length = 0;
datos.propiedadesFiltradas.push.apply(datos.propiedadesFiltradas,data);
}
我可以改变这一点:
ng-repeat="propiedad in sidebarCtrl.propiedades[0]"
ng-repeat="propiedad in sidebarCtrl.propiedades[0]"
到
您是否尝试过datos.propiedadesFiltradas=[]然后是datos.propiedadesFiltradas.push(数据);是的,由于dfsq答案而无法工作!您是否尝试过datos.propiedadesFiltradas=[]然后是datos.propiedadesFiltradas.push(数据);是的,由于dfsq答案而无法工作!