当angularJS中的另一个更改时,您可以绑定来自一个范围的数据以更新

时间:2013-09-17 15:52:11

标签: angularjs

我的网络应用依赖于在整个用户访问期间更改的一个特定变量。它控制用户在任何给定时间看到的数据,基本上类似于TAG。

如果$scope.tagid = 1,当tagid更改为$ scop.tagid = 2时,是否可以使用另一个角度模型立即更新自己的数据集?

 <script >
function PageCtrl($scope) {
  $scope.text = '<?=$tagid?>';
}
 $scope.showThread = function(tagid) {
 $http({method: 'GET', url: 'api/example/thread/id/' + tagid}).
      success(function(data, status, headers, config) {
          $scope.appDetail = data;               //set view model
          $scope.view = './Partials/detail.html'; //set to detail view
      }).
      error(function(data, status, headers, config) {
          $scope.appDetail = data || "Request failed";
          $scope.status = status;
          $scope.view = './Partials/detail.html';
      });
 }
</script>
    <div ng-controller="PageCtrl">
        <input ng-model='text' />
      <ul>
        <li >
          <span>{{text}}</span>
        </li>
      </ul>
    </div>

以上是我要做的事情的骨架。

我意识到,如果我想,我可以在每次用户操作后调用showThread()并更新数据...但是,由于我想要设置网站,所以只更有意义更改tagid,然后让其他所有内容立即更新,而不是选择并选择我想要更新的网站的每个部分。也就是说,除了showThread()之外,还有updateHeader(),changeSidebar()等。

谢谢!

1 个答案:

答案 0 :(得分:1)

我个人使用服务取得了成功; **假设您在1页上使用2个控制器,我会创建一个这样的服务:

MyApp.app.service("tagDataSvc", function () {

var _tagId = {};

return {
    getTagId: function () {
        return _tagId;
    },
    setTagId: function (value) {
        _tagId = value;
    }
};

});

接下来,将此服务注入将使用此服务的控制器中。

在您控制TagId(PageCtrl)的主控制器中,您需要通过调用服务来设置共享tagId值:tagDataSvc.setTagId($scope.text)您可以明确地执行此操作,或者添加$ watch on $ scope.text,或者你喜欢的任何东西。

最后,在你想要自动更新的第二个控制器中,在这个服务的getTagId()函数上添加一个$ watch,如下所示:

  $scope.$watch(function () { return tagDataSvc.getTagId(); }, function (newValue, oldValue) {
        if (newValue != null) {
            $scope.tagId2 = newValue;
            //reload whatever needs updating here
        }
    }, true);