如何使用带有参数的AngularJS函数在其他位置更改文本?

如何使用带有参数的AngularJS函数在其他位置更改文本?,angularjs,Angularjs,好了,我找到了我要完成的任务的解决方案:使用某种切换功能,我在这里的堆栈溢出的其他问题中看到了几种不同的方式。然而,我的是一个有点特殊的情况,我似乎不知道如何调整以使其工作 这是需要显示文本的手风琴: <div ng-controller="Ctrl"> <accordion id="myID"> <accordion-group heading="My Heading"> {{toggleText}} </accordi

好了,我找到了我要完成的任务的解决方案:使用某种切换功能,我在这里的堆栈溢出的其他问题中看到了几种不同的方式。然而,我的是一个有点特殊的情况,我似乎不知道如何调整以使其工作

这是需要显示文本的手风琴:

<div ng-controller="Ctrl">
  <accordion id="myID">
    <accordion-group heading="My Heading">
      {{toggleText}}
    </accordion-group>
  </accordion>
</div>
最终,名称和地址不会挤在一起,但这仅用于测试目的

当我运行代码时,简单地说什么都没有发生

要么有一种方法来清理这个问题,要么有一种完全不同的方法来处理这个问题?我希望我提供了足够的信息

我希望它能简单到:

<area ng-repeat="x in building" alt="{{x.name}}" title="" ng-click="thisBuilding = x.name+x.address" shape="poly" coords="{{x.htmlcoords}}" />

$scope.buildingName = name;
        $scope.buildingAddress = address;
        $scope.thisBuilding = function(){
            return $scope.buildingName + " " + $scope.buildingAddress;
        };
    };

这听起来很像一个范围问题。当ng repeat为每个项目创建一个新的子范围时,最有可能的结果是将$scope.toggleText属性设置在错误的范围内,即不在尝试显示该属性的accordion组的范围内

例如,您可能需要使用一些角度检查器工具来验证这一点

如果问题确实在于toggleText属性最终位于错误的子作用域中,那么一种可能的解决方法可能是在根作用域中为该属性引入容器对象。这可能起作用的原因是对象作为子作用域的引用传递,而不是像原语属性那样作为副本传递。关于这一主题的更多信息可以从中阅读

从控制器Ctrl开始,沿着这些线:

然后在html模板中:

<div ng-controller="Ctrl">
  <accordion id="myID">
    <accordion-group heading="My Heading">
      {{toggleContainer.text}}
    </accordion-group>
  </accordion>
</div>

切换此ClickX.name、x.address、toggle=之前缺少逗号!切换更改到此ClickX.name,x.address;切换=!toggle@Fals谢谢,我不知道那里应该有分号而不是逗号。这样就消除了那个疯狂的错误,代码现在进入了带有警报的测试函数。但是,切换仍然没有发生:您必须检查如何将切换变量与您正在使用的手风琴一起使用!好看将使用非开发版本获得更详细的错误输出minified@Fals手风琴实际上与任何事情都无关。这正好是它所在的容器。可以是div,p,span,随便什么。我看到的另一个例子是,它在一个按钮上。
<area ng-repeat="x in building" alt="{{x.name}}" title="" ng-click="thisBuilding = x.name+x.address" shape="poly" coords="{{x.htmlcoords}}" />

$scope.buildingName = name;
        $scope.buildingAddress = address;
        $scope.thisBuilding = function(){
            return $scope.buildingName + " " + $scope.buildingAddress;
        };
    };
{{thisBuilding()}}
// inside the controller code:
// initialize the toggleContainer object
$scope.toggleContainer = {};
<div ng-controller="Ctrl">
  <accordion id="myID">
    <accordion-group heading="My Heading">
      {{toggleContainer.text}}
    </accordion-group>
  </accordion>
</div>
$scope.thisClick = function(name,address){
  $scope.toggle = true;
  $scope.$watch('toggle',function(){
    $scope.toggleContainer.text = $scope.toggle ? '' : name+address;
  });
};