其他人很可能对这种现象感到困惑,所以我在这里发布这个问题。
HTML
<select
ng-model="cont.selectedItem"
ng-options="item.name for item in cont.lists.items" >
</select>
//"cont" indicates the controller. $scope is not used here
<span ng-click="addNewItem()">add</span>
JS
var instance = this;
instance.list = { ...item instances... };
instance.selectedItem;//Is it really necessary?
instance.addNewItem = function() {
var item = instance.selectedItem;
...
}
我曾经认为selectedItem
中使用的ng-model
必须在JS中声明为instance.selectedItem
,以便我可以看到item
是ng-options
在var item
中选择。
但是,我注意到addNewItem
函数中的instance.selectedItem
获取了所选项目,即使public class Graph {
public void generateGraph(int VertexNum, int numOfEdges) throws ZeroVerticesException, DisjointGraphException{
//Statements
}
//More methods
}
被注释掉。
我去了Angular的文档,但我找不到原因。
任何建议都将受到赞赏。
答案 0 :(得分:2)
在您的情况下,您在控制器的this
上下文中定义了一个基本类型变量,默认情况下,selectedItem
的值未定义,因为this
已经定义了:)。在此时,角度$parser
设置一个值。这个操作非常简单。在幕后$parse
为你做这件事。
让我向您展示另一个示例,您可以在其中看到$parse
API提供的实际魔力。假设您要设置model.something
的值,其中model
对象尚未定义。让我们将该值传递给$parse
API并为其指定一些值(请参阅下面的代码可以帮助您理解)。将model.something
值赋给ng-model
指令时,会发生同样的情况。每当您更改ng-model
值assign
时,它的值为其上下文的基础变量。
以下是说明$parse
如何运作的示例。
mainMod.controller('MainCtrl', ['$parse','$interpolate','$compile',
function ($parse,$interpolate,$compile) {
var vm = this;
//$parse
vm.parse = $parse('model.something');
//assigning value to `model.something` from `vm`
//so the value is going to put inside `vm`
//while assigning a value it check that value exists or not
//if it isn't exist then it creates an value inside mentioned context
//here context is `vm`(this)
vm.parse.assign(vm, 'Pankaj');
console.log(vm.model); //vm.model will have { something: 'Prakash' }
}
]);