我一直遇到一个问题,我需要通过ng-click传递$ scope上的属性,以便在ng-click方法中访问该属性。其中一个问题是$ scope.rejectionMessage似乎永远不会更新。
HTML部分:
<label class="item item-input">
<input
type="text"
ng-model="rejectionMessage"
ng-change="logWTF(rejectionMessage)"
placeholder="Enter rejection message here."
>
</label>
<button
type="button"
class="button button-block button-outline button-assertive"
ng-click="rejectChild(rejectionMessage)"
>
REJECT
</button>
控制器部分:
$scope.logWTF = function(rejectionMessage){
console.log($scope.rejectionMessage) // messageA
console.log(rejectionMessage) // messageB
}
messageA($ scope.rejectionMessage)始终为空字符串,但messageB始终是输入中当前输入的内容。
html只有一个控制器但仍然显示我有2个独立的$ scope对象。我调试了这个并查看了所有相关的$ parentScopes,并且没有发现rejectionMessage属性隐藏在任何意外的地方。
一个简单的解决方案是通过按钮ng-click方法通过函数传递属性,但我有其他依赖于$ scope.rejectionMessage的函数。我可以一直通过它,但是它带走了很多Angular的价值。另外我对Angular来说相对较新,觉得这对我来说是一次很棒的学习经历。
编辑:我刚学会了所有形式的名字=&#39;东西&#39;使用单独的控制器,因此有自己的$ scope。答案 0 :(得分:1)
如果input
位于控制器范围的子范围内,则会发生这种情况。它被称为原型继承:阅读$scope.foo
在原型链中向上读取,但写入$scope.foo
会将其设置在该确切范围内。因此input
会将其设置在子范围内,与按钮相同,但与控制器不同。
这里的经验法则是在控制器的范围上设置一个对象,例如: $scope.model = {};
,并将ng-model
更改为model.rejectionMessage
。然后,您确定自己指的是控制器范围的rejectionMessage
。有人说&#34;每个ngModel应该有一个点&#34;,因为这个。