1

私はイオンを使用してアプリケーションを開発していて更新されていないと私は別のコントローラから変更されたときに値が自動的に更新されていない値コントローラは、工場

コントローラと工場の値を更新する問題を抱えている

私の英語のため申し訳ありませんが、私はスペイン語

Factory.js

aplicacion.factory("parametrosUsuarioFactory", function(){ 
var datos={ 
    nombre : '', 
    imagenDePerfil:'' 
} 

var interfaz = { 
    actualizarNombre: function(nombreRecibido){ 
     datos.nombre = nombreRecibido; 
    }, 
obtenerNombre: function(){ 
     //console.log("Datos adentro:"+datos); 
     return datos.nombre; 
    }, 
    actualizarImagenDePerfil: function(imagenDePerfilRecibido){ 
     datos.imagenDePerfil = imagenDePerfilRecibido; 
    }, 
    obtenerImagenDePerfil: function(){ 
     //console.log("Datos adentro:"+datos); 
     return datos.imagenDePerfil; 
    } 


} 
return interfaz; 
}) 

Controller.js

0123を話します
$scope.nombre = parametrosUsuarioFactory.obtenerNombre(); 
$scope.imagenDePerfil = parametrosUsuarioFactory.obtenerImagenDePerfil(); 

index.htmlを

<p id="nombreMenu" style="padding: 10px 10px 4px;">{{nombre}}</p> 
<div id="contenedorImagenDePerfil"> 
<img id="imagenDePerfil" src="{{imagenDePerfil}}"/> 
</div> 

Controller2.js

parametrosUsuarioFactory.actualizarNombre(data.data.full_name); 
parametrosUsuarioFactory.actualizarImagenDePerfil(data.data.profile_picture); 
parametrosUsuarioFactory.actualizarIdUsuario(data.data.id); 

答えて

0

問題は、サーバー内の関数の結果に、あなたのスコープ変数を割り当てると角度を見ることができないということです更新のためのもの。

あなたには2つのオプションがあります。 described hereとして機能を見る方法がありますが、いくらか混乱することがあります。

サービスから変更が加えられたことをブロードキャストして、それをコントローラで監視し、スコープ変数を適切に更新することができます。ここにサンプルがあります...

javascriptの

var aplicacion = angular.module('app', []); 

aplicacion.factory("parametrosUsuarioFactory", function($rootScope) { 
    var datos = { 
     nombre: '', 
     imagenDePerfil: '' 
    } 

    var interfaz = { 
     actualizarNombre: function(nombreRecibido) { 
      datos.nombre = nombreRecibido; 
      $rootScope.$broadcast("datosActualizado"); 
     }, 
     obtenerNombre: function() { 
      return datos.nombre; 
     }, 
     actualizarImagenDePerfil: function(imagenDePerfilRecibido) { 
      datos.imagenDePerfil = imagenDePerfilRecibido; 
      $rootScope.$broadcast("datosActualizado"); 
     }, 
     obtenerImagenDePerfil: function() { 
      return datos.imagenDePerfil; 
     } 
    } 
    return interfaz; 
}); 

aplicacion.controller("controller1", function($scope, parametrosUsuarioFactory) { 
    $scope.obtenerDatos = function() { 
     $scope.nombre = parametrosUsuarioFactory.obtenerNombre(); 
     $scope.imagenDePerfil = parametrosUsuarioFactory.obtenerImagenDePerfil(); 
    }; 

    $scope.$on("datosActualizado", function(){ $scope.obtenerDatos() }); 

    $scope.obtenerDatos(); 
}); 

aplicacion.controller("controller2", function($scope, parametrosUsuarioFactory) { 
    $scope.actualizarValores = function() { 
     parametrosUsuarioFactory.actualizarNombre("nombre de controller2"); 
     parametrosUsuarioFactory.actualizarImagenDePerfil("imagen de controller2"); 
    } 
}); 

HTML

<div ng-app="app"> 
    <div ng-controller="controller1"> 
     <h2>controller1</h2> 
     Nombre: {{nombre}}<br> 
     Imagen: {{imagenDePerfil}} 
    </div> 
    <br><br> 
    <div ng-controller="controller2"> 
     <h2>controller2</h2> 
     <button ng-click="actualizarValores()"> 
      Actualizar valores de controller1 
     </button> 
    </div> 
</div> 

は、これは、1つのアプローチの超簡単な例です。働いてJSFiddle

P.S.あなたの英語を謝ってはいけません。それは私のスペイン語よりはるかに優れています。 :)

+0

あなたは絶対に正しいです、私は決して変更を聞いていない、私はデバイスを試して、正常に正常に実行してください。 –

関連する問題