【发布时间】:2017-03-20 17:44:54
【问题描述】:
编译器是一个遍历 DOM 的 Angular 服务 寻找属性。编译过程分两个阶段进行。
编译:遍历 DOM 并收集所有指令。这 result 是一个链接函数。
链接:将指令与范围组合并生成实时视图。 任何 范围模型中的更改会反映在视图中,并且任何用户 与视图的交互反映在范围模型中。这 使范围模型成为唯一的事实来源。
在我看来,我用粗体突出显示的部分有点误导。似乎不是这样,但这完全取决于指令的实现。
考虑this fiddle中的示例
angular.module('app', []);
var app = angular.module('app');
app.controller('MyCtrl', function ($scope) {
$scope.hi = 'Hello World';
$scope.log = function() {
console.log($scope.hi);
}
});
app.directive('myDir', function() {
return {
restrict: 'E',
template: '<input value="{{hi}}" />',
link: function($scope) {
$scope.$watch('hi', function(newVal, oldVal) {
if(newVal === oldVal) return;
console.log('value changed');
});
}
}
});
用这个观点
<div ng-app="app">
<div ng-controller="MyCtrl">
<my-dir></my-dir>
<button ng-click='log()'>log scope</button>
</div>
</div>
输入元素中的更改不会传播到范围(我完全了解指令 ng-model 并且使用 {{}} 我只是单向插入表达式,但我要争辩的是正是这个:文档不清楚,因为我引用的部分完全取决于指令的实现)。
我怀疑我遗漏了什么,所以我的问题是:我遗漏了什么/误解了什么?
【问题讨论】:
标签: javascript angularjs angularjs-directive