Angularjs 角度控制器中类似控制器的独立作用域

Angularjs 角度控制器中类似控制器的独立作用域,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我正在开发一个应用程序,它在一个页面上使用多个(但类似)控制器(controllerA)和另一个控制器(controllerB),可以更改某些属性,但前提是之前选择了controllerA的元素 (在controllerA中,某些属性可能具有默认值,这些值通过使用数据属性传递和应用) 在此阶段,我只能使用controllerB修改最后一个颜色属性(这很有意义,因为这是活动范围。我的问题是,如何将controllerB范围更改为所选controllerA的“活动”范围副本 // Code goes

我正在开发一个应用程序,它在一个页面上使用多个(但类似)控制器(
controllerA
)和另一个控制器(
controllerB
),可以更改某些属性,但前提是之前选择了
controllerA
的元素

(在
controllerA
中,某些属性可能具有默认值,这些值通过使用数据属性传递和应用)

在此阶段,我只能使用
controllerB
修改最后一个颜色属性(这很有意义,因为这是活动范围。我的问题是,如何将controllerB范围更改为所选
controllerA
的“活动”范围副本

// Code goes here

var webApp = angular.module("webApp", []);

webApp.controller("controllerA", function($scope, $rootScope, $element, styleFactory){
$scope.selected = false;
var color = angular.element($element[0]).attr("data-style-color");
styleFactory.setColor(color);  
$scope.data = styleFactory.getData();

$scope.select = function(){
  $scope.selected = !$scope.selected;
}
});

webApp.controller("controllerB", function($scope, $rootScope, $element, styleFactory){
  $scope.data = styleFactory.getData();
});

webApp.factory("styleFactory", function(){
  var data = {"style":"color:yellow"}

  return {
    setColor: function(color){
      data = {"style":"color:"+color};
    },
    getData: function(){
      return data;
    }
  };
});
例如:

谢谢,
--iM

您可以看到一个经过修改的plnkr,它可以按照您的描述工作

就我个人而言,我会重新构建应用程序的架构,并重新思考styleFactory的实现

需要思考的几点:

  • data={“style”:“color:+color}
    替换整个数据对象,因此
    $scope.data=styleFactory.getData()
    仅适用于最后一个
    controllerA
    ,因为所有其他对象的引用都会丢失

  • 尝试创建位于
    controllerA
    controllerB
    顶部的父控制器

  • 尝试使用指令解决此问题


谢谢。是的,我实际上有另一个控制器,我试图用一个控制器和多个指令做同样的事情。问题是我的控制器不在指令范围内(不是环绕指令),但这可能是唯一可行的方法…再次使用thx