【发布时间】:2014-09-15 05:14:04
【问题描述】:
我有一个输入和一个按钮,我希望当按钮被点击时,输入的值会改变:
<input type="text" ng-model='myModel'>
<button ng-click="changeMyModel()">my button</button>
在控制器中:
$scope.changeMyModel = function () {
$scope.myModel = 'new value';
}
它可以工作,但是当我想将 myModel 传递给 changeMyModel() 函数时:
<input type="text" ng-model='myModel'>
<button ng-click="changeMyModel(myModel)">my button</button>
$scope.changeMyModel = function (myModel) {
myModel = 'new value';
}
没有用
我真的想将一个属性传递给一个函数,因为当我使用 ng-repeat 时,每个循环,模型都是不同的,并且我不能在循环时为数组的 n 个元素声明 n var(我有 $sope .objects):
<div ng-repeat="object in objects">
<input type="text" ng-model='object'>
<button ng-click="changeMyModel(object )">my button</button>
</div>
【问题讨论】:
-
在 JS 中字符串是不可变的,这有一些副作用,其中它们有点像原语而不是对象,您的 myModel 属性应该是对象而不是字符串。如果它是一个具有属性的对象,并且您将该对象传递给函数,那么更改该模型的属性将是有效的。此外,ng-init 有一个非常特殊的用例(对于 ng-repeat 对 $index 或其他特殊属性的引用),文档声明它不应该在其他上下文中使用,而是在控制器中初始化。
-
@shaunhusain 即使我传递了一个对象,它也不起作用,即使我传递了数组的键,它也不起作用
-
@shaunhusain 给出的建议是正确的。确保您的模型更改函数将实际对象作为参数,但通过其属性修改对象的值。这里的粗略示例 - jsfiddle.net/zgybdxjb
-
请参阅youtu.be/ZhfUv0spHCY?t=32m,了解有关此错误的原因和简单规则的更多详细信息。 controllerAs 语法稍微改变了这条规则,但如果你使用的是原始样式,那么这适用。下面的答案应该是好的,如果不是,请显示一个解决问题的问题。
标签: angularjs angularjs-directive angularjs-ng-repeat