更新后,$ scope变量不会与视图绑定

时间:2016-11-20 16:20:11

标签: angularjs data-binding angularjs-scope

我有一个$scope变量isAuth是一个boolean,当用户登录时它将是真的。我使用此变量来显示使用ng-hide的页脚。我也有$routeProvider服务的路由定义。 html代码有一个maincontroller和一个由另一个控制器测试控制的子集。在用户使用服务的login()功能登录后,我调用位置服务将用户路由到由不同控制器控制的'/ test'路径 - 测试。虽然“test”仅控制html文档的<ng-view>部分,但文档的其余部分仍然使用maincontroller。 我遇到的问题是即使$isAuth函数中servicecall()的值更新,它也不会反映在html中。

角色代码

ub.config(function($routeProvider){
        $routeProvider

        .when('/',{
            templateUrl: '../pages/home.htm',
            controller:'mainController'
        })

        .when('/test',{
            templateUrl: '../pages/test.htm',
            controller:'test'
        })

var ub = angular.module('ub',['ngRoute']);

ub.controller('mainCtrl',['$scope','testsrv',function($scope,testsrv){
$scope.isAuth = false;
$scope.msg="";

$scope.servicecall = function(){
console.log('in service call function');

    testsrv.login().then(function(response){
  $scope.msg="in service call function";
    $scope.isAuth = true;
$location.path('/test');

    });
};//servicecall

}]);

ub.service('testsrv',['$q','$log',function($q,$log){
var self=this;
self.login = function(){
var def = $q.defer();
var msg='calling a service function';
$log.log(msg);
def.resolve(msg);
return def.promise;
};

}]);

HTML

    <body ng-app='ub'>
    <div ng-controller="mainCtrl">
    <button ng-click="servicecall()">click me!</button>
   <ng-view>
    </ng-view>
    <br>
     {{isAuth}}
    <br>
    {{msg}}

    </div>
    </body>

1 个答案:

答案 0 :(得分:0)

我通过将变量分配给$ rootScope服务解决了这个问题,因为$ rootScope.isAuth