如何通过AngularJS指令更改另一个视图中的信息?

时间:2013-09-26 13:35:07

标签: angularjs angularjs-directive angularjs-scope

好的,这是一个令人费解的问题,我可能会问一个糟糕的方法。如果是这种情况,请告诉我。

所以我有一个导航栏directive。当有人点击某些内容时,我设法获得了添加类的指令,因此加载了该栏。 Thanks to StackOverflow

但是现在,我有一个获取和设置值的服务。在服务中更改值时,我想在视图中反映出来。这样的事情有可能吗?

修改 为了澄清,如果我使用$apply(function()....,我该怎么做?我的观点有类似的东西。我的观点不受任何特定控制器或范围的约束。不确定是否应该。但这是我的观点片段:

    <p>
        Are you sure you change that song,
        <br />
  {{ songs[0].title }}
    </p>

这是我的指示:

angular.module('MyApp')
  .directive('navbar', function () {
    return {
      restrict: 'A',
      templateUrl : '/views/partials/nav.html',
      controller: function ($scope, ModalService) {
        $scope.ms = ModalService;
        $scope.songs = {};

        $scope.$watch('ms.songs', function(newVal, oldVal) {
          if(newVal != null) {
            $scope.$apply(function() {
              $scope.songs = newVal;
            });
          }
        });
          },

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

angular.module('MyApp')
  .directive('navbar', function () {
    return {
      restrict: 'A',
      templateUrl : '/views/partials/nav.html',
      controller: function ($scope, ModalService) {
        $scope.songs = ModalService.songs;
      }
  });

答案 1 :(得分:0)

我最近碰到了一个场景,我必须在指令中的服务属性上设置监视,解决方案是在链接函数中设置监视类似于:

link: function(scope, element, attrs) {
    // other link code
    scope.$watch(function() { return svc.property; }, function(data) {
        // do something here
    });
    // other link code
}