我尝试使用AngularJS在textarea上呈现默认消息。我尝试添加的某些值需要使用$timeout
才能获取值。
使用以下代码似乎无法呈现消息:
<textarea class="text-input referral-message" ng-init="message=buildMessage(purchase_count)"
ng-model="message" rows="5">
</textarea>
$timeout(function() {
ReferralService.settings().$promise.then(function(settings) {
$scope.purchase_count = settings.credits;
});
$scope.buildMessage = function(val){
return "Buy " + val + " and get 1 free for every purchase"
}
}, 1);
答案 0 :(得分:1)
寻找scope.apply函数并尝试这样的事情(我是从我的记忆中写下来的,不要期望它完全正常运行):
ReferralService.settings().$promise.then(function(settings) {
$scope.$apply(function(){
$scope.message = "Buy " + settings.credits + " and get 1 free for every purchase";
});
});
和
<textarea class="text-input referral-message" ng-model="message" rows="5">
</textarea>
编辑:考虑到$ timeout可能没有必要。
Edit2:看看将ReferalService作为工厂实施(angular.service vs angular.factory)我也可以帮助你。
答案 1 :(得分:1)
您可以使用{{}}显示数据模型中的内容
<textarea class="text-input referral-message" rows="5">{{message}}
</textarea>
$timeout(function() {
ReferralService.settings().$promise.then(function(settings) {
$scope.purchase_count = settings.credits;
$scope.message = "Buy " + $scope.purchase_count + " and get 1 free for every purchase"
});
}, 1);
答案 2 :(得分:1)
在您的情况下使用ngInit
不是一个好习惯,因为它会在您的模板中添加不必要的逻辑。
只需从ng-init
中删除textarea
,并在解决承诺时初始化您的message
变量:
ReferralService.settings().$promise.then(function (settings) {
$scope.message = buildMessage(settings.credits);
});
function buildMessage(val) {
return "Buy " + val + " and get 1 free for every purchase"
}