如何更新另一个控制器中的范围值

时间:2015-04-27 03:33:22

标签: angularjs

我有两个控制器和一个工厂。我正在尝试从controller1更新工厂中的值以查看controller2上的更新。 Controller2是我的侧边栏的控制器。

控制器1:

$scope.proyectoLoad = ProyectoLoadedFactory.getProyectoLoaded();    

$scope.setDefault = function () {            
  $scope.proyectoLoad = $("#valueProyecto").val();           
  $("#small").modal("hide");
};

$scope.$watch('proyectoLoad', function (newValue, oldValue) {
    ProyectoLoadedFactory.setProyectoLoaded(newValue);
}, true);

var proyectoLoaded = -1;
var returnFactory = {
    getProyectoLoaded: function () {
        return proyectoLoaded;
    },
    setProyectoLoaded: function (idProyecto) {
        proyectoLoaded = idProyecto;            
    }
};
return returnFactory;

和控制器2:

$scope.proyectoLoaded = ProyectoLoadedFactory.getProyectoLoaded();
        $scope.$watch(ProyectoLoadedFactory.getProyectoLoaded(), function (oldValue, newValue) {
            $scope.proyectoLoaded = newValue;
        }, true);

我的工厂正在更新其值,但在控制器2上我没有看到任何变化..它保持-1值。

提前致谢。

1 个答案:

答案 0 :(得分:1)

你的吸气者和制定者正在妨碍双向绑定...

简化您的工厂,以便它只管理返回对象中的值

var proyectoLoaded = -1;
var returnFactory = {
    proyectoLoaded: proyectoLoaded
};
return returnFactory; 

然后您的Controller2可以简化为只将工厂返回的对象分配给范围...

$scope.proyectoLoaded = ProyectoLoadedFactory;

现在,当该对象的值在工厂中发生变化时,您的控制器中将会看到该更改。

以下是CodePen

的示例