从另一个访问和刷新指令

时间:2015-01-21 15:50:35

标签: angularjs angularjs-directive

我有一个由2个指令组成的页面:
PeopleHeader
PeopleAction

我在peopleAction指令中做了一些处理 当这些处理结束时,我想在header指令中更新变量并刷新标题
任何帮助将不胜感激 非常感谢你

标头指令

app.directive("peopleHeader", [
        "ListeCmcQueryHelper", function(ListeQueryHelper) {
            return {
                templateUrl : "partials/people/peopleHeader.html",
                restrict : "E",
                link : function(scope) {

                    scope.nbPeople= ListeQueryHelper.totalRequested; // how to refresh this variable and so the view from PeopleActionDirective

                }
            };
        }
]);

与headerDirective相关联的Html

<h3> {{'PEOPLE.TITLE' | translate}} </h3>
<h5> {{'PEOPLE.TOTAL' | translate }} : {{nbPeople.total}}</h5>

PeopleActionDirective

      app.directive("peopleAction", [
                "ListeQueryHelper", function(ListeQueryHelper) {
                    return {
                        templateUrl : "partials/people/peopleAction.html",
                        restrict : "E",
                        link : function(scope) {

                             scope.deletePeople= function() {
                             ListeQueryHelper.deletePeople();
                             scope.nbPeople= ListeQueryHelper.totalRequested;
                            // need to send this to HeaderDirective and so refresh the view
                          }

                        }
                    };
                }
        ]);

非常感谢

2 个答案:

答案 0 :(得分:1)

ListeQueryHelper是一项服务,对吗? 如果没有,那就把它弄成一个。

因此,在您的指令中scope.nbPeople具有相同的引用:ListeQueryHelper.totalRequested

在其中一个中更改它将反映在另一个中。因此,如果您在scope.deletePeople中拨打ng-click(自动为您调用scope.$apply),则可以在另一个指令中scope.$watch('nbPeople', ...。 或者只是将其绑定到模板(<span>{{nbPeople}}</span>)。

答案 1 :(得分:1)

简而言之,链接功能只运行一次。因此,在示例代码中,它只会从ListeQueryHelper.totalRequested获取一次值。

解决方案1: 使用&#39; =&#39;在two way binding中执行此操作 顺便说一句,如果你选择解决方案1,你需要熟悉指令。首先阅读该链接。

解决方案2: 请改用对象。 scope.nbPeople=ListeQueryHelper.SomeObj 并在html中:nbPeople.totalRequested

解决方案3: 使用活动。