如何在 ng-click 上从模板文字调用函数
how to call a function from template literal on ng-click
我正在从模板文字中调用函数 close_popup。我想传递一个变量 id。下面是代码
function register_popup(id, name) {
var htmlelement = `<div class="popup-box chat-popup" id="${id}">
<div class="popup-head background-purple-gradient">
<div class="popup-head-left">${name}-${id}</div>
<div class="popup-head-right">
<span style="cursor:pointer" ng-click="close_popup(${id})">✕</span>
</div>
<div style="clear: both"></div>
</div>
<div class="popup-messages">
<div ng-repeat="message in chatMessages" ng-class="{'message-right': message.align == 'right', 'message-left': message.align == 'left'}">
<div class="message-text">{{message.msg}}</div>
<span class="message-time">{{message.time}}</span>
</div>
</div>
<md-divider></md-divider>
<form ng-submit="sendMsg()" emoji-submit="sendMsg()" emoji-form emoji-message="new_message">
<div class="popup-input-wrapper md-padding" layout="row" layout-align="start center">
<div class="message-form input-wrapper md-padding" layout="row" layout-align="start center">
<div flex layout="row" layout-align="center center">
<input style="font-size:15px" type="text" class="input-control" id="popup-message-input" ng-model="new_message.message" placeholder="Type a message..." autofocus flex/>
</div>
<md-button id="emojibtn" class="md-icon-button" aria-label="close">
<md-icon md-svg-src="cloud/client/assets/svg/smile.svg"></md-icon>
</md-button>
<md-button class="md-icon-button" id="send-message" aria-label="close">
<md-icon md-svg-src="cloud/client/assets/svg/send.svg"></md-icon>
</md-button>
</div>
</div>
</form>
</div>`
var compiledElement = $compile(htmlelement)(scope);
var pageElement = angular.element(document.getElementById("chat-room"));
pageElement.append(compiledElement);
scope.popUps.push(id);
calculate_popups();
}
函数被调用,但作为参数传递的 id 未定义。如何正确传递参数?
我认为您缺少 id 的引号,因为它应该是字符串文字。
ng-click="close_popup('${id}')"
更新:
How come ng-click="close_popup('${id}')
works but not ng-click="close_popup(${id})"
这有点难以解释,因为我们在 AngularJS 模板中有 JavaScript 的模板文字。
当您调用 register_popup
时,您将向其传递一个 id,它是一个字符串值。它的值(比如 popupId
)将被注入到模板字符串中。因此,当 angular 获取您的模板时,所有 ${id}
都将被 popupId
替换。 Angular 看到的是:ng-click="close_popup(popupId)"
。它将 popupId
视为在 $scope
上定义的变量并尝试查找它(这就是你未定义的原因)。
您实际想要传递给 Angular 的是 ng-click="close_popup('popupId')"
因此您需要额外的引号。
你可以在编译它之前做一个console.log(htmlelement)
。这将帮助您了解字符串在求值后会变成什么。
我正在从模板文字中调用函数 close_popup。我想传递一个变量 id。下面是代码
function register_popup(id, name) {
var htmlelement = `<div class="popup-box chat-popup" id="${id}">
<div class="popup-head background-purple-gradient">
<div class="popup-head-left">${name}-${id}</div>
<div class="popup-head-right">
<span style="cursor:pointer" ng-click="close_popup(${id})">✕</span>
</div>
<div style="clear: both"></div>
</div>
<div class="popup-messages">
<div ng-repeat="message in chatMessages" ng-class="{'message-right': message.align == 'right', 'message-left': message.align == 'left'}">
<div class="message-text">{{message.msg}}</div>
<span class="message-time">{{message.time}}</span>
</div>
</div>
<md-divider></md-divider>
<form ng-submit="sendMsg()" emoji-submit="sendMsg()" emoji-form emoji-message="new_message">
<div class="popup-input-wrapper md-padding" layout="row" layout-align="start center">
<div class="message-form input-wrapper md-padding" layout="row" layout-align="start center">
<div flex layout="row" layout-align="center center">
<input style="font-size:15px" type="text" class="input-control" id="popup-message-input" ng-model="new_message.message" placeholder="Type a message..." autofocus flex/>
</div>
<md-button id="emojibtn" class="md-icon-button" aria-label="close">
<md-icon md-svg-src="cloud/client/assets/svg/smile.svg"></md-icon>
</md-button>
<md-button class="md-icon-button" id="send-message" aria-label="close">
<md-icon md-svg-src="cloud/client/assets/svg/send.svg"></md-icon>
</md-button>
</div>
</div>
</form>
</div>`
var compiledElement = $compile(htmlelement)(scope);
var pageElement = angular.element(document.getElementById("chat-room"));
pageElement.append(compiledElement);
scope.popUps.push(id);
calculate_popups();
}
函数被调用,但作为参数传递的 id 未定义。如何正确传递参数?
我认为您缺少 id 的引号,因为它应该是字符串文字。
ng-click="close_popup('${id}')"
更新:
How come
ng-click="close_popup('${id}')
works but notng-click="close_popup(${id})"
这有点难以解释,因为我们在 AngularJS 模板中有 JavaScript 的模板文字。
当您调用 register_popup
时,您将向其传递一个 id,它是一个字符串值。它的值(比如 popupId
)将被注入到模板字符串中。因此,当 angular 获取您的模板时,所有 ${id}
都将被 popupId
替换。 Angular 看到的是:ng-click="close_popup(popupId)"
。它将 popupId
视为在 $scope
上定义的变量并尝试查找它(这就是你未定义的原因)。
您实际想要传递给 Angular 的是 ng-click="close_popup('popupId')"
因此您需要额外的引号。
你可以在编译它之前做一个console.log(htmlelement)
。这将帮助您了解字符串在求值后会变成什么。