Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Factory阵列可以推送,但不能替换_Javascript_Angularjs - Fatal编程技术网

Javascript Factory阵列可以推送,但不能替换

Javascript Factory阵列可以推送,但不能替换,javascript,angularjs,Javascript,Angularjs,我有这个工厂 DatosFactory.js (function() { 'use strict'; angular.module('InmoManager') .factory('DatosFactory', function($http, $location) { var datos = { propiedadesFiltradas: [] } ... datos.get

我有这个工厂

DatosFactory.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();

    });
})();
这个控制器

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答案而无法工作!