是否可以通过引用将范围变量(特别是数组)传递给使用ng-click调用的函数,并操纵所述变量的值?
更新
为了更明确,我的目标是避免在override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancel")
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "done")
self.title = "Pick a Source"
}
func cancel() {
self.dismissViewControllerAnimated(true, completion: nil)
}
func done() {
//save things
self.dismissViewControllerAnimated(true, completion: nil)
}
中访问$ scope。
使用Javascript:
$scope.app.onItemClick
相关HTML:
(function() {
angular.module('test', [])
angular.module('test').controller('test',['$scope', function ($scope) {
$scope.app = {};
$scope.app.primarySet = [
'test1',
'test2',
'test3'
]
$scope.app.workingSet = [
'test4',
'test5',
'test6'
]
/*
* Attempts to assign $scope.app.primarySet to $scope.app.workingSet using references to those two values.
*/
$scope.app.onItemClick = function (primarySet, workingSet) {
primarySet = workingSet
}
}])
})()
有关此代码的更多信息,请参阅this Plunker。
我对此代码的期望是按下按钮时<button type="button" ng-click="app.onItemClick(app.primarySet, app.workingSet)">Update Primary Set</button>
将设置为$scope.app.primarySet
。不幸的是,这种情况并非如此。在调试时,在函数范围内,$scope.app.workingSet
被分配给primarySet
。但是workingSet
不是。
我的动机源于this SO reply。我同意如果我没有直接引用它,那么测试操作范围的方法会更容易。我还发现这比直接操作范围的函数更直接。
我遇到的唯一资源是this SO question。虽然这个问题很接近,但不同之处在于,有问题的参数是一个字符串,如果我理解正确,则无法修改作为参考, 。
答案 0 :(得分:1)
JavaScript允许您以对象的形式访问对象的属性,因此您可以按如下方式修改模板:
<button type="button" ng-click="app.onItemClick(app, 'primarySet', app, 'workingSet')">Update Primary Set</button>
并将onItemClick方法修改为:
$scope.app.onItemClick = function ( leftObject, leftProperty, rightObject, rightProperty) {
leftObject[leftProperty] = rightObject[rightProperty];
}
答案 1 :(得分:1)
如果您通过onItemClick传递$ scope.app槽,则可以更改$ scope中的primarySet,如下所示:
(function() {
angular.module('test', [])
angular.module('test').controller('test',['$scope', function ($scope) {
$scope.app = {};
$scope.app.primarySet = [
'test1',
'test2',
'test3'
]
$scope.app.workingSet = [
'test4',
'test5',
'test6'
]
/*
* Attempts to assign $scope.app.primarySet to $scope.app.workingSet using references to those two values.
*/
$scope.app.onItemClick = function (app, workingSet) {
app.primarySet = workingSet;
}
}])
})()
<button type="button" ng-click="app.onItemClick(app, app.workingSet)">Update Primary Set</button>
原因是当您传递数组时,只将值传递给函数。