Javascript 是否有某种方法可以将对角度模型的引用传递给范围函数?
我在一个web应用程序中有几个Javascript 是否有某种方法可以将对角度模型的引用传递给范围函数?,javascript,angularjs,Javascript,Angularjs,我在一个web应用程序中有几个canvas区域,用于在官方文档中捕获人们的签名。我正忙于开发一个弹出窗口,为用户在较小的设备上登录提供更大的区域。特征区域如下所示: <canvas width="400" height="200" ng-signature ng-model="Party1.SignatureBase64"></canvas> <a href="" ng-click="getSignatureModal(Party1.SignatureBase64)
canvas
区域,用于在官方文档中捕获人们的签名。我正忙于开发一个弹出窗口,为用户在较小的设备上登录提供更大的区域。特征区域如下所示:
<canvas width="400" height="200" ng-signature ng-model="Party1.SignatureBase64"></canvas>
<a href="" ng-click="getSignatureModal(Party1.SignatureBase64)">Show Signature Pad</a>
我可以将我的ng click更新为:
ng-click="Party1.SignatureBase64=getSignatureModal(Party1.SignatureBase64)"
但这似乎有点笨拙。或者这是最好的方法吗?我会通过从模式中注入$rootScope和
$broadcast
来实现这一点
改装控制器以接收模型作为消息上的有效负载,然后将其与模态实现解耦。不久前,我创建了一个fiddle,它使用$rootScope
作为消息代理。我不确定我是否有足够的关于您特定领域的信息来确定这是否能满足您的需要,但您可以在
看法
我会用模态电视台的$broadcast来做这件事。改装控制器以接收模型作为消息上的有效负载,然后将其与模态实现解耦。不久前,我创建了一个fiddle,它使用$rootScope作为消息代理。我不确定我是否有足够的域信息来确定这是否能满足您的需要,但您可以在上查看。我认为ng modal具有scope属性,也许您可以传递该范围以引用主控制器的“$modalInstance”。{controller:'SignatureModalController',size:'lg',scope:$scope,…}@wZVanG我喜欢这个想法,但是我如何告诉模态它必须使用什么scope属性呢?如果我有访问范围的权限,我可以传递一个模态名称,但我对使用“eval”的想法犹豫不决。感谢您提供了一个非常有教育意义的答案,但这仍然让我知道如何从接收模态消息的函数“返回”修改后的签名模型。我的问题不是从模态返回签名,而是从调用模态的函数返回签名。对于直接消息传递,我唯一一个非常新手的想法是,在每个控制器上都有一个接收器函数,该控制器的模型可能会改变,让该模型广播模型名称和模型数据,然后以某种方式按名称设置范围属性。接收器(假设这是一个控制器)“更改的签名模型”将注入MessagingService,“Messenger”功能也需要在接收控制器上实现。让您的接收者将传入模型放入消息中,并从$rootScope进行广播。我的建议是使消息类型特定于特定任务,而不是设置“targetRecipient”
ng-click="Party1.SignatureBase64=getSignatureModal(Party1.SignatureBase64)"
<div ng-controller="Messenger">
<input ng-model="message" style="width:100px">
<input ng-model="target" style="width:87px" >
<button ng-click="handleClick(message,target);">Send Message</button>
</div>
<div ng-controller="ControllerOne">
<input ng-model="message" >
</div>
<div ng-controller="ControllerTwo">
<input ng-model="message" >
</div>
var myModule = angular.module('MessageOrientedModule', []);
myModule.factory('messagingService', function($rootScope) {
var service = {};
service.notify = function(message, recipient, type){
var payload = {};
Object.defineProperty(payload,"recipient",{value:recipient});
Object.defineProperty(payload,"body",{value:message});
$rootScope.$broadcast(type,payload);
};
return service;
});
function Messenger($scope, messagingService) {
$scope.handleClick = function(message,target) {
messagingService.broadcastSpecific(message,target);
};
$scope.$on('message.broadcast', function(event, message) {
$scope.message = message.body + ' [SENT]';
});}
function ControllerOne($scope) {
$scope.$on('message.broadcast', function(event, data) {
if(data.recipient != "Ctrl1")
{
$scope.message = '123 Not it!';
}
else
{
$scope.message = '[Ctrl1][Received]:' + data.body;
}
});
}
function ControllerTwo($scope) {
$scope.$on('message.broadcast', function(event,data) {
if(data.recipient != "Ctrl2")
{
$scope.message = '123 Not it!';
}
else
{
$scope.message = '[Ctrl2][Received]:' + data.body;
}
});
}