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]);