【问题标题】:Changing $scope variable value in controller not changing value on view在控制器中更改 $scope 变量值不会更改视图上的值
【发布时间】:2015-04-01 04:54:42
【问题描述】:

我正在为我的应用程序开发 Cordova 工具和 angularjs。

cordovaApp.controller("VacationCtrl", function ($scope, $http, $location) {
        $scope.tempdate = "2222";
        $scope.ruleDetails = function () {
        $scope.tempdate = "3333";
    }
});

查看 1

<div ng-controller="VacationCtrl">
    <a ng-repeat="data in rules" ng-click="ruleDetails()" class="summaryListBorder" href="#detailVacationRule">
    </a>
</div>

查看 2

<div ng-controller="VacationCtrl">
    {{tempdate}}
</div>

在上面给出的代码中,我将$scope.tempdate 的值设置为“2222”。当我点击链接时,它会调用ruleDetails() 并设置$scope.tempdata = "3333". 但是当使用ng-view 打开新页面时,它只显示旧值,即“2222”。我想用“3333”来改变它。我也试过$scope.$apply()

谢谢。

【问题讨论】:

  • 为什么会有两个视图同名“VacationCtrl”?

标签: angularjs cordova angularjs-scope ng-view


【解决方案1】:

每个ng-controller 属性都会创建一个新的控制器实例,它不会与其他实例共享相同的范围。您想将两个 divs 包装在一个控制器实例中,例如:

<div ng-controller="VacationCtrl">
    <div>
        <a ng-click="ruleDetails()" href="#detailVacationRule">
        </a>
    </div>

    <div>
        {{ tempdate }}
    </div>
</div>

如果您需要单独的控制器,那么您希望将常用功能/字段移动到作为单例运行的服务中,以便您可以使用它在控制器之间共享信息。或者您可以在父控制器中包含单独的控制器实例,该控制器将包含公共字段并且可以通过每个控制器的范围进行访问。

【讨论】:

  • 我做不到。对于同一个控制器,我有两个不同的视图。如果我在同一个视图上创建 {{template}},那么所有的东西都会一次显示出来。
  • 你应该这样做,否则你的 tempdate 值不会改变。您的 href 将始终默认为 $scope.tempdate 被初始化为 2222。
  • 感谢您的回复,但我仍然不清楚这一点。我想根据用户点击特定记录打开其他视图。如果您有任何工作示例,请建议我。
  • 使用 Angular 有很多方法可以给猫剥皮,因此在不知道您的确切问题的情况下很难为您提供解决方案。不过,请查看其他 SO 答案,如果您仍然不确定,请告诉我:stackoverflow.com/a/11938785/4044584
  • 谢谢,现在我已经为不同的功能创建了不同的控制器。它正在工作......谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多