Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 为什么该值不能';在两个控制器之间通信后,是否在视图中显示?_Angularjs_Angularjs Scope_Angular Ui Router - Fatal编程技术网

Angularjs 为什么该值不能';在两个控制器之间通信后,是否在视图中显示?

Angularjs 为什么该值不能';在两个控制器之间通信后,是否在视图中显示?,angularjs,angularjs-scope,angular-ui-router,Angularjs,Angularjs Scope,Angular Ui Router,我又遇到了这个问题。有谁能帮我解决这个问题吗 第一种观点: <a type="button" ui-sref="index.usermng.userInfo" ng-click="checkUserInfo(item.id)" class="btn btn-primary">CheckUser</a> 第二种观点: <div class="tab-pane active tab-chrome" id="tab-chrome"> <div cla

我又遇到了这个问题。有谁能帮我解决这个问题吗

第一种观点:

<a type="button" ui-sref="index.usermng.userInfo" ng-click="checkUserInfo(item.id)" class="btn btn-primary">CheckUser</a>
第二种观点:

<div class="tab-pane active tab-chrome" id="tab-chrome">
    <div class="row feature">
        <div class="col-md-12">
            <ul class="list-group">
                <li class="list-group-item">UserId:{{data.user.userId}}</li>
                <li class="list-group-item">Name:{{data.user.name}}</li>
                <li class="list-group-item">Sex:{{data.user.sex}}</li>
                <li class="list-group-item">Birthday:{{data.user.birthday | date:'yyyy-MM-dd'}}</li>
                <li class="list-group-item">Mobile:{{data.user.mobile}}</li>
            </ul>
        </div>
    </div>
</div>
}])

配置:

.state('index.usermng.userInfo',{
        url: '/userInfo',
        templateUrl: 'tpls/userInfo.html',
        controller: 'userInfoCtrl'
    })

在第二个控制器中,我可以从第一个控制器获取userId,并且可以获取数据,但是视图没有显示任何内容,哪里出了问题?

这是一个众所周知的角度错误。这与模板中的值没有更新有关,因为范围变量作为值传递,并且在呈现视图时只发生一次。这是正常的Javascript行为

解决方法是将所有值放置在一个对象上。我建议您在控制器中执行此操作:

 $scope.checkUserInfo = function(userId) {
    $rootScope.$broadcast('toUserInfo', userId);
}
userApp.controller('userInfoCtrl', ['$scope', '$http', '$rootScope', 'serverUrl', function($scope, $http, $rootScope, serverUrl) {
$rootScope.$on('toUserInfo', function(event, userId) {
    console.log(userId); //i can get userId here
    $http.get(serverUrl + "/user/info?userId=" + userId).success(function(data) {
        console.log(data); // i can get data here
        //if (data.code == 0) {
        //    $scope.detailUserID = userId;
        //    $scope.detailUserName = data.data.user.name;
        //    $scope.detailSex = data.data.user.sex;
        //    $scope.detailBirthday = data.data.user.birthday;
        //    $scope.detailMobile = data.data.user.mobile;
        //    $scope.detailCash = data.data.accumulate.usableCash;
              $scope.data = data.data
        }
        //can't show in the view
    })
})
$scope.data=data.data

在模板中,您可以按如下方式进行更改:

  • 名称:{{data.user.Name}
  • 等等

    这里有一个很好的经验法则:如果模板中的变量中没有点,那么就有问题了


    顺便说一句,一个更有利的方法是使用controllerAs,它强制您在模板中的变量名中使用一个点

    您确定块条件是否通过了吗?当您在if块的末尾记录$scope时会发生什么情况?@MattHerbstritt是的,它可以通过谢谢,我按照您的建议这样做,但它不起作用。@ParkerSong您能给我看看它的更新版本吗?我刚刚更新了它。我想问题是ui路由器,如果我将两个视图放在同一个视图中,数据可以显示。但是如果我创建一个新的html文件作为第二个视图,数据无法显示仍然无法解决此问题,可以帮助我吗?