我对AngularJs很新,我有一个简单的问题。我想把这个名字。但是这个名字最初只有一个值,但在0.3-0.5秒之后它还有其他价值。我不知道如何绑定它,价值可能会改变。
HTML code:
<div ng-controller="FormController">
<h2 >
{{getName()}}<br>
<span class="icon-f-gear"></span>
<small>Procesas</small>
</h2>
</div>
角度控制器:
var App = angular.module('form', ['ui.bootstrap']);
App.controller('FormController', ['$scope' ,'$http', function($scope, $http) {
$scope.tasks = [];
$scope.socket.stomp.subscribe("/app/tasks", function (message) {
if ($scope.tasks.length !=0){
$scope.tasks.removeAll();
}
JSON.parse(message.body).forEach(function (el) {
$scope.tasks.push(el);
});
});
$scope.getName = function(){
return $scope.tasks[0].form.name;
};
我使用Stomp协议,它不会立即给我数据,因为它必须向服务器发送请求并将其取回,这需要时间。我尝试在请求变量$ scope.tasks [0] .form.name从undefined更改为&#34; Institution&#34;之后进行调试,但是在屏幕未定义的保留中,如何绑定变量以在dinamically中更改值。提前感谢您的帮助!
更新 问题解决了,我只需要使用$ scope.apply(...)函数。代码在这里:
var App = angular.module('form', ['ui.bootstrap']);
App.controller('FormController', ['$scope' ,'$http', function($scope, $http) {
$scope.tasks = [];
$scope.socket.stomp.subscribe("/app/tasks", function (message) {
if ($scope.tasks.length !=0){
$scope.tasks.removeAll();
}
JSON.parse(message.body).forEach(function (el) {
$scope.tasks.push(el);
});
$scope.apply(function(){$scope.tasks});
});
$scope.getName = function(){
return $scope.tasks[0].form.name;
};
感谢您的帮助!
答案 0 :(得分:3)
很可能订阅回调没有在角度上下文中调用。尝试将回调代码包装在$scope.$apply
中,看看它是否有效
$scope.socket.stomp.subscribe("/app/tasks", function (message) {
$scope.$apply(function() {
if ($scope.tasks.length !=0){
$scope.tasks.removeAll();
}
JSON.parse(message.body).forEach(function (el) {
$scope.tasks.push(el);
});
});
});
答案 1 :(得分:0)
我相信你调用的方法返回undefined,因为它没有数据。 换句话说:给它一个初始值,它应该工作
我会把它重写为:
<div ng-controller="FormController">
<h2>
{{formName}}<br>
<span class="icon-f-gear"></span>
<small>Procesas</small>
</h2>
</div>
并且
App.controller('FormController', ['$scope' ,'$http', function($scope, $http) {
$scope.formName = '';
--- rest of code
或者,如果您希望以当前方式保留它: App.controller('FormController',['$ scope','$ http',函数($ scope,$ http){
$scope.tasks = [];
$scope.tasks[0].form.name = '';
或
$scope.getName = function(){
return ($scope.tasks.length > 0) ? $scope.tasks[0].form.name : '';
};
我希望这会有所帮助