Javascript 与其他控制器共享所选的选择

Javascript 与其他控制器共享所选的选择,javascript,angularjs,Javascript,Angularjs,我正在尝试与其他控制器共享所选选项,并在选择新选项时更新该选项。类似于控制器之间的双向数据绑定 我已经尝试过这样建立一个工厂 .factory("shareObjective", function($scope){ var shareObjective = {}; return { shareObjective: shareObjective, }; }) 然后我将其注入控制器,并将其绑定到select的模型,就像这样 $scope.selec

我正在尝试与其他控制器共享所选选项,并在选择新选项时更新该选项。类似于控制器之间的双向数据绑定

我已经尝试过这样建立一个工厂

.factory("shareObjective", function($scope){

     var shareObjective = {};
     return {
         shareObjective: shareObjective,
     };
})
然后我将其注入控制器,并将其绑定到select的模型,就像这样

$scope.selectModel = shareObjective.shareObjective;
我似乎很难让它正常工作。我基本上只想与另一个控制器共享所选的选项。确切地说,它的名称是。我的第一步是让它分享到工厂开始,但我似乎没有运气尝试这一点。我应该使用类似$broadcast的东西来保持信息流的开放吗?谢谢


编辑-这里有一个plunkr

是的,这在默认情况下不起作用,因为您使用两个不同的作用域,因此使用不同的模型。 使用服务也无济于事,因为即使在一个作用域中单击带有ngModel的select将在该作用域中触发摘要循环,也不会在另一个作用域中触发它。 正如您自己所建议的,您需要以某种方式通知另一个作用域进行自我更新,是的,您可以通过事件$broadcast和$on:

两个控制器都包含

<select
    ng-model="foo"
    ng-options="foo for foo in foos"
></select>
请注意,我的代码不使用单个控制器,只使用单个控制器实现。您可以编写自己的MyCtrl1和Myctrl2实现,这两个实现都包含此代码


此外,虽然它看起来会在$watch和$on之间生成一个无限循环,但它不会$scope.foo=数据;不会触发$watch,

能否设置一个plunker。。它应该是工作的,因为到底什么是不工作的?是不是当值在工厂中更改时没有更新?我将进行一次plunkr。谢谢$广播将事件沿作用域树发送,因此您可以从两个控制器的任何公共父级发出它$范围。$parent应该可以。
var foos = [
    'foo1',
    'foo2',
    'foo3'
];

function MyCtrl($scope, $rootScope) {
    $scope.foo = foos[0];
    $scope.foos = foos;

    // detect broadcasts from other controllers and set our value to the one we received
    $rootScope.$on('foo-event', function(e, data) {
        $scope.foo = data;
    });

    // detect when foo changes and broadcast it's value
    $scope.$watch('foo', function() {
        $rootScope.$broadcast('foo-event', $scope.foo);
    });
}

myApp.controller('MyCtrl1', ['$scope', '$rootScope', MyCtrl]);
myApp.controller('MyCtrl2', ['$scope', '$rootScope', MyCtrl]);