可以推送工厂阵列但不能更换

时间:2015-07-21 16:10:05

标签: javascript angularjs

我有这个工厂

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

时不会更新

2 个答案:

答案 0 :(得分:0)

当您重新分配f=imread('/tmp/bump.jpg'); %color image %Hue - Saturation - Value f_rgb2hsv=rgb2hsv(f); %convert image to HSV double f_hsv2rgb=hsv2rgb(f_rgb2hsv);%convert to RGB double f_to_image=uint8(f_hsv2rgb); %convert to uint8 to see image imshow(f_to_image); 时,您将中断对象引用,并且结果// List of colours we'll use. var colors = ['red', 'blue', 'purple', 'orange', 'green']; // Define the div and it's contents var div = document.getElementById('colors') var string = div.innerHTML; // A function to return a span object with coloured text. color_span = function(color, inner) { return '<span style="color:' + color + '">' + inner + '</span>' } var color_count = 0; var return_html = ''; // Cycle through each character in the string for (i=0; i < string.length; i++) { // If it's an open bracket, add a coloured span to the return_html and increment the colour counter if ( string[i] == '(' ) { return_html += color_span(colors[color_count], string[i]); color_count++; // If close bracket add coloured span and decrement the colour counter. } else if ( string[i] == ')' ) { color_count--; return_html += color_span(colors[color_count], string[i]); // If neither just add the character. } else { return_html += string[i]; } } // Change the div's html. div.innerHTML = return_html 不再指向Angular设置绑定对象。

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

还有一件事。我建议您使用ngClass指令代替datos.propiedadesFiltradas = data;

datos.propiedadesFiltradas

和HTML

$('#wrapper').toggleClass('toggled');

答案 1 :(得分: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"