如何在两个不同的控制器中传递ng-model的值

时间:2014-10-28 17:04:11

标签: javascript angularjs

我有一个ng-model,我希望从两个不同的控制器访问它的值。我知道在两个不同控制器之间共享数据的方法是使用service。但我不能将ng-model的值用于服务,而只能使用控制器。

3 个答案:

答案 0 :(得分:0)

您可以将两个控制器div包装在一个共同的父级中,然后使用$ watch()来更改该模型,然后$ emit()在$ watch中观察更改时对子控制器的更改()

参考链接

$watch reference

$emit reference

答案 1 :(得分:0)

你可以使用rootscope来访问那个ng-model变量。但这不是一个好习惯。

<input ng-model="mk" type="text">
控制器中的

$rootScope.mk=$scope.mk;

并在其他控制器中以$rootScope.mk

的形式访问它

注意:您必须在控制器中注入$ rootScope。

答案 2 :(得分:0)

为什么不能使用服务?服务正是您在应用程序的不同部分共享数据的方式。您可以通过在每个控制器上公开您的服务并将ng-model绑定到该服务来实现此目的。

JS

angular.module('app', [])
  .factory('User', [function () {
    var service = {
      username: null
    };
    return service;
  }])
  .controller('MainCtrl', ['$scope', 'User', function ($scope, User) {
    $scope.User = User;
  }])
  .controller('SecondCtrl', ['$scope', 'User', function ($scope, User) {
    $scope.User = User;
  }]);

HTML

<div ng-controller="MainCtrl">
  <input type="text" ng-model="User.username">
</div>
<div ng-controller="SecondCtrl">
  <input type="text" ng-model="User.username">
</div>

Plunker:http://plnkr.co/edit/VSEHD970O0xWbu6OCPqB?p=preview