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文件作为第二个视图,数据无法显示仍然无法解决此问题,可以帮助我吗?