我有这个工厂

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;
    })
})();


这个控制器

SidebarController.js

(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'">


这很好!,但是,我想更改此:

ng-repeat="propiedad in sidebarCtrl.propiedades[0]"




ng-repeat="propiedad in sidebarCtrl.propiedades"


和这个

datos.setPropiedadesFiltradas = function(data){
    datos.propiedadesFiltradas.length = 0;
    datos.propiedadesFiltradas.push(data);
}




datos.setPropiedadesFiltradas = function(data){
    datos.propiedadesFiltradas = data;
}


但是当我这样做时,变量sidebarCtrl.propiedades变得不确定(当我调用datos.setPropiedadesFiltradas()时不会更新

最佳答案

重新分配datos.propiedadesFiltradas = data;时,将中断对象引用,结果datos.propiedadesFiltradas不再指向对象Angular设置的绑定。

另一方面,当您推送对象时,对象引用保持不变,并且Angular的更改跟踪引擎可以检测到更改并重新渲染视图。

还有一件事。我建议您使用ngClass指令而不是$('#wrapper').toggleClass('toggled');

sidebarCtrl.toggleSidebar = function() {
    sidebarCtrl.toggle = !sidebarCtrl.toggle;
}


和HTML

<div id="wrapper" ng-class={toggled: toggle}>...</div>

09-17 02:02