0

我的网络应用程序依赖于在用户访问期间发生变化的一个特定变量。它控制用户在任何给定时间将看到的数据,本质上类似于 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() 等。

谢谢!

4

1 回答 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)您可以显式执行此操作,或在 $scope.text 上添加 $watch 或任何您想要的更喜欢。

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

  $scope.$watch(function () { return tagDataSvc.getTagId(); }, function (newValue, oldValue) {
        if (newValue != null) {
            $scope.tagId2 = newValue;
            //reload whatever needs updating here
        }
    }, true);
于 2013-09-17T17:09:28.843 回答