Angularjs 角度模态未更新结果中的$scope
我试图在Angular中实现一个模式窗口,以提示用户输入,我在以前的应用程序中使用了几乎相同的代码,它起了作用,我真的不知道这里发生了什么 以下是打开模式的控制器(在Coffee脚本中): 现在,模态实例控制器:Angularjs 角度模态未更新结果中的$scope,angularjs,coffeescript,modal-dialog,Angularjs,Coffeescript,Modal Dialog,我试图在Angular中实现一个模式窗口,以提示用户输入,我在以前的应用程序中使用了几乎相同的代码,它起了作用,我真的不知道这里发生了什么 以下是打开模式的控制器(在Coffee脚本中): 现在,模态实例控制器: .controller('addStreamModalInstance', [ '$scope', '$modalInstance', '$http', 'public_key' ($scope, $modalInstance, $http, public_key) -
.controller('addStreamModalInstance', [
'$scope', '$modalInstance', '$http', 'public_key'
($scope, $modalInstance, $http, public_key) ->
console.log(public_key)
$scope.public_key = public_key
$scope.ok = ->
console.log($scope.public_key)
$modalInstance.close $scope
return
$scope.cancel = ->
$modalInstance.dismiss "cancel"
return
return
])
以及HTML:
<div class="modal-header">
<h4>Please enter the private key for verification {{public_key}}</h4>
</div>
<div class="modal-body">
<div class="form-group">
<input type="text" class="form-control" id="exampleInputEmail1" ng-model="public_key">
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="ok()">OK</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>
请输入用于验证的私钥{{public_key}
好啊
取消
因此,我点击一个按钮,模态打开,文本框中有“占位符”,我还可以看到这个绑定到模态标题的测试。当我在框中结束文本时,由于绑定,标题将继续按预期更新,但是当我单击“确定”时,$scope.public_键似乎恢复为“占位符”。试图找出原因。当您在
addStreamModalInstance
控制器中设置值时,您的工作范围与addStreamModal不同。
要使用addStreamModalInstance
中设置的值更新addStreamModalInstance
的范围,您可以返回所选值(您通过返回$scope来执行此操作)并在.then调用您的addStreamModal
控制器中分配它
您的addStreamModal
将类似于(对不起,我的咖啡脚本不太好):
好的,我现在开始工作了,我回到angular示例,测试了它,然后慢慢地根据我的需要调整它,下面是代码:
.controller "addStreamModal", ($scope, $modal, $http, $log) ->
$scope.public_key = ""
$scope.open = ->
modalInstance = $modal.open(
templateUrl: "addStream.html"
controller: "addStreamModalInstance"
resolve:
public_key: ->
$scope.public_key
)
modalInstance.result.then ((public_key) ->
console.log(public_key)
return
), ->
$log.info "Modal dismissed at: " + new Date()
return
return
return
例如:
.controller "addStreamModalInstance", ($scope, $modalInstance, public_key) ->
$scope.editable = public_key: public_key
$scope.ok = ->
$modalInstance.close $scope.editable.public_key
return
$scope.cancel = ->
$modalInstance.dismiss "cancel"
return
return
HTML:
我是模态的!
好啊
取消
因此,我认为区别在于我将公钥嵌套到实例控制器中的.editable对象中。我不完全理解为什么这样做,但我很高兴这样做。哪个作用域恢复为公钥?addStreamModal还是addStreamModalInstance?嗯,您不需要将模式回调的结果分配给scop吗父控制器“addStreamModal”中的e变量?从未编写过一行cs,但您没有使用“result”执行任何操作看起来很奇怪。如果我错了,请告诉我。是的,这看起来不那么奇怪:)不幸的是,这对我不起作用。然而,我确实找到了一个解决方案,并发布了。这在什么方面不起作用?第二次打开模式窗口时,我希望您会看到第一次输入的文本。(例如,打开模式、编辑键、关闭模式、重新打开模式,您应该会看到您第一次输入的值)。概念和方法与我发布的基本相同。让我们试着理解“为什么”,这样这篇文章可以帮助其他人。
.controller "addStreamModal", ($scope, $modal, $http, $log) ->
$scope.public_key = ""
$scope.open = ->
modalInstance = $modal.open(
templateUrl: "addStream.html"
controller: "addStreamModalInstance"
resolve:
public_key: ->
$scope.public_key
)
modalInstance.result.then ((public_key) ->
console.log(public_key)
return
), ->
$log.info "Modal dismissed at: " + new Date()
return
return
return
.controller "addStreamModalInstance", ($scope, $modalInstance, public_key) ->
$scope.editable = public_key: public_key
$scope.ok = ->
$modalInstance.close $scope.editable.public_key
return
$scope.cancel = ->
$modalInstance.dismiss "cancel"
return
return
<div class="modal-header">
<h3 class="modal-title">I'm a modal!</h3>
</div>
<div class="modal-body">
<input type="text" name="input" class="form-control" ng-model="editable.public_key">
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="ok()">OK</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>