【问题标题】:Angular: How to refresh view from another scope?Angular:如何从另一个范围刷新视图?
【发布时间】:2016-01-04 17:48:22
【问题描述】:

问题: 我有一个简单的注册表。新用户进行身份验证后,我的应用程序将他带到一个新链接,但不显示包含内容的新页面,也不在视图中切换 ng-if。所以视图没有刷新(但是当我按下 F5 按钮时一切都很好),我试图刷新它,但实际上并不了解我需要运行什么

注册表:

  1. 服务Authentication。将数据设置为localStorage并转移到新链接的方法:

 Authentication.registration = function(data) {
   localStorage.setItem('registrationData', JSON.stringify(data));
   $location.path('/userPage');
 }
 Authentication.ifLog = function() {
   // verify if the user exists in localStorage
 }
  1. 弹出登录表单,它是Link函数中的directive(有自己的作用域)方法:

 $scope.registration = function(form) {
     Authentication.registration(
     };
  1. 这一切都是为了切换菜单和转移到用户页面。当用户登录时,我们向他显示第一个和第三个菜单并将他转移到一个新页面。 'Base' - 这是一个控制器,我从Authentication 服务调用ifLog 方法

<li ng-if="Base.logined"><a href="#userPage">UserPage</a></li>
<li ng-if="!Base.logined" ng-click="Base.toggleModal()">LogIn</li>
<li ng-if="Base.logined">{{Base.user.name}}</li>

我应该怎么做才能更新视图?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    您的变量在控制器中更新,但不在视图中。您可以使用scope apply 更新视图中的变量。

    【讨论】:

    • 感谢您的回复。是的,我尝试过使用 apply,但在我看来,我做错了地方。我尝试在我的指令范围中使用 scope.apply 。据我了解,我需要在我的 Base 控制器中使用,但在注册后我没有运行该范围内的任何方法。我应该如何使用它?
    • 如果你登录的变量在错误的地方,你可以使用$rootScope,但这不是干净的方式。
    • 我不想使用 rootScope,我正在学习 Angular 并希望以最好的方式学习它 :)。不,主 Base 控制器中的 'logined' var,但是我在具有隔离范围的指令中运行的服务方法,因此 Base 控制器不会刷新。如果我做 $scope.apply() 我在我的指令范围内不起作用,我应该在我的指令或主 Base 控制器中做 $scope.apply(and something is here)?
    • 基本控制器和 $rootScope 在语义上是相同的。它们都与封装原则相反。好的,还有另一种更清洁的方法。您可以在您的服务中创建 $rootScope.$apply(),其中“已登录”已更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多