该API参考范围页面说:
范围可以从父范围继承.
该开发者指南范围页说:
范围(原型)从其父范围继承属性.
那么,子范围是否始终从其父范围继承原型?有例外吗?当它继承时,它是否总是正常的JavaScript原型继承?
javascript inheritance prototype prototypal-inheritance angularjs
我试图允许用户使用ngRepeat和编辑项目列表ngModel.(看到这个小提琴.)但是,我尝试过的两种方法都会导致奇怪的行为:一个不更新模型,另一个模糊每个keydown上的形式.
我在这里做错了吗?这不是支持的用例吗?
以下是小提琴的代码,为方便起见而复制:
<html ng-app>
<head>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/css/bootstrap-combined.min.css" rel="stylesheet">
</head>
<body ng-init="names = ['Sam', 'Harry', 'Sally']">
<h1>Fun with Fields and ngModel</h1>
<p>names: {{names}}</p>
<h3>Binding to each element directly:</h3>
<div ng-repeat="name in names">
Value: {{name}}
<input ng-model="name">
</div>
<p class="muted">The binding does not appear to be working: the value in the model is not changed.</p>
<h3>Indexing into the array:</h3>
<div ng-repeat="name in names">
Value: {{names[$index]}}
<input ng-model="names[$index]">
</div>
<p class="muted">Type one character, and the input …Run Code Online (Sandbox Code Playgroud) 所以我最近将一些重复的标记移动到ng-template块中,我注意到在块内部,我没有直接访问范围变量,但我仍然可以调用范围函数.
例如,考虑以下标记:
<script type="text/ng-template" id="toggle-button.html">
<button ng-click="toggleFlag()">I Toggle the Flag</button>
<button ng-click="flag = !flag">I Do Nothing</button>
</script>
<span ng-include="'toggle-button.html'"></span>
The flag is {{flag}}
Run Code Online (Sandbox Code Playgroud)
与以下脚本配对:
var app = angular.module('myApp', [])
.controller("myController", ['$scope', function($scope){
$scope.flag = true;
$scope.toggleFlag = function(){
$scope.flag = !$scope.flag;
}
}])
Run Code Online (Sandbox Code Playgroud)
Live JS这个行为的小提琴:http: //jsfiddle.net/uM4Ss/
第一个按钮工作,第二个按钮不工作.有人可以回答为什么会这样吗?
我正在编写一个angular.js指令,它是一个对象数组的可重用输入组件.
由于不可能使用原始值ng-repeat(参见:对于数据绑定许多输入的angularjs方法是什么?),我必须将一个对象数组传递给组件:
在控制器中我初始化:
$scope.theSimpsons = [{ value: 'Bart' }, { value: 'Lisa' }];
Run Code Online (Sandbox Code Playgroud)
然后在HTML文件中使用它:
<div ng-app="App">
<div ng-controller="AppCtrl">
<multi-input items="theSimpsons" />
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
该指令本身实现如下:
directive('multiInput', function () {
return {
restrict: 'E',
scope: {
items: '=items'
},
template:
'<div>' +
'<div ng-repeat="item in items">' +
'<input type="text" ng-model="item.value">' +
'<a ng-click="items.splice($index, 1)">remove</a>' +
'</div>' +
'<a ng-click="items.push({value:\'\'})">add</a>' +
'</div>'
};
});
Run Code Online (Sandbox Code Playgroud)
这一切都很好.
我的问题:如果对象没有value?
该指令value很难对property()的名称进行编码.但是,如果我想拥有这样一个阵列:[{ name: 'Bart' }, { name: 'Lisa' }] …
所以这就是它的样子,这里是Plunker
parent scope
ng-repeat
directive
Run Code Online (Sandbox Code Playgroud)
在指令中,有一个属性是与父作用域中的变量进行双向绑定.
但这并不像我想的那样有效.(但我能理解为什么它不起作用)
原因是ngRepeat将创建它自己的范围,因此一旦在指令中更改变量,Angular会在ngRepeat中添加一个变量,但它会使变量保持在父变量中.
我可以做一些像scope.$ parent.$ parent.variable来改变变量,但它在Angular中不是一个想法.
我应该怎么做 ?
此外,如果我更改项目集合中的重复项目,则无法更改项目.
因为上面的原因相同.