我正在編寫一個AngularJS指令,並希望將ng-model值綁定到控制器中的一個對象數組。指令鏈接中的$ render會在數組中的任何內容發生更改時觸發。事實上,只有在對數組的引用發生更改時纔會觸發$ render。爲什麼是這個,這是ngModelController的預期行爲?下面Angular JS ng模型綁定行爲
代碼演示了這種行爲,並且在這種提琴:http://jsfiddle.net/HandyManDan/RCctF/
<div ng-app="tryApp">
<div ng-controller="MyCtrl">
<div> Bound in controller: {{modelVals[0].val}}</div>
<div> Bound in directive: <span my-dir="" ng-model="modelVals"></span></div>
<button ng-click="lftBtn()">Mod deep</button>
<button ng-click="rtBtn()">Mod ref</button>
</div>
</div>
myApp.controller('MyCtrl', function($scope) {
$scope.modelVals = [{val:'val init'}];
$scope.lftBtn = function() {
$scope.modelVals[0].val = 'val change deep';
};
$scope.rtBtn = function() {
$scope.modelVals = [{val:'val change ref'}];
};
});
myApp.directive('myDir', function() {
return {
restrict: 'A',
priority: 1,
require: 'ngModel',
link: function(scope, element, attr, ngModel) {
ngModel.$render = function() {
element.find('*').remove();
var el = angular.element("<span>" + ngModel.$modelValue[0].val + "</span>)");
element.append(el);
};
}
};
});
這使小提琴的工作,但不是一個正確的答案。 $ render仍然沒有被解僱。 – HandyManDan
@HandyManDan我刪除了代碼中對jQuery附加組件的需求。他們沒有必要。只需使用模板:-)不需要渲染;-) – qwertynl