我想爲點擊編輯輸入字段生成指令。由於我需要處理各種不同類型的輸入字段,因此我希望將其設置爲只是跨輸入字段本身的屬性類型指令。角度transclude和範圍
但是,問題是當使用範圍參數指向描述(對於ipDisable)時,事情停止工作,因爲他們應該(嘗試在jsFiddle js部分第44行中註釋)。據推測,這是一個範圍錯誤,但我真的不知道從哪裏開始調試它,任何幫助,將不勝感激。
的jsfiddle: http://jsfiddle.net/HbYwX/3/
HTML:
<input inplace type="string" ip-disable=false name="username" ng-model="uname">
JS:
myApp.directive('inplace', function($compile) {
var compile = function(tElem,tAttrib,transclude) {
var whole = $('<div ng-scope></div>');
var editable = $('<div class="editable-transclude" ng-hide="static">'+
'<a ng-click="changeStatic()" ng-show="!static && !disable()">'+
'<save></a></div>');
whole.append(editable).append('<span class="disabledText" ng-show="static">{{ngModel.$viewValue}}</span>' +
'<a ng-click="changeStatic()" ng-show="static && !disable()">'+
'<edit></a>');
tElem.replaceWith(whole);
transclude(tElem,function(clone) {
clone.removeAttr('inplace');
editable.prepend(clone);
});
return function(scope, element, attrs) {
var input_element = $($(element).find('input')[0]);
scope.name = input_element.name;
scope.ngModel = element.controller('ngModel');
scope.static = true;
scope.changeStatic = function() {
if (scope.static) {
scope.static = false;
} else if (!scope.ngModel.$error[scope.name]){
scope.static = true;
}
};
};
};
return {
transclude: 'element',
scope: { disable: '&ipDisable' },
restrict: 'A',
compile: compile
};
});
我簡單地嘗試了myown上的第一種可能性,並且無法完成它的工作(我將不得不$ $看有問題的屬性,對吧?)。 更好的解決方案聽起來相當複雜,除非我錯過了一些東西。有沒有一種簡單的方法可以將整個ng-model直接綁定到輸入字段ng-model,還是我必須手工連接所有的API調用? – velochy