Angularjs 指令将指令添加为属性并动态绑定它们
Angularjs directive add directives as attribute and bind them dynamically
您好,我正在处理需要编辑的指令 DOM 添加 ng-src 属性和模型。
这是我的DOM
<edit-component>
<img src="images/logo.png" title="Hearty Wear" />
</edit-component>
我需要结果 DOM 是
`<div>
<img src="images/logo.png" title="Hearty Wear" ng-src={{myModel}} />
</div> `
这样当我用数据更新 myModel 时图像应该更新
更新
sam.directive('editComponent', function() {
return {
restrict: 'EA',
transclude: true,
replace: true,
templateUrl: "imageTemplate.html",
link: function(scope, element, attb, ctrl, transclude) {
scope.data = function() {
var imagedata;
imagedata = arguments[5];
scope.imageModel = imagedata.base64;
return element.find('img').attr('src', "data:image/png;base64," + imagedata.base64);
};
}
};
});
我还需要以前的 src 属性值来显示现有图像。
现在我正在更新 src 属性 manually.I 需要解决方案,我可以通过 model 变量
谢谢
尝试
<img ng-if="!myModel" src="images/logo.png" title="Hearty Wear"/>
<img ng-if="myModel" src="{{ myModel }}" title="Hearty Wear"/>
在大量阅读各种博客和网站中有关 AngularJS 指令的文档之后。
我刚刚了解完整的指令流程
流量将来自
Compile -> Controller -> preLink -> postLink or (Link)
如果您想在编译阶段[添加angular(ng-model, ng-style,ng-src)的任何核心指令
var app;
app = angular.module('App', []);
app.directive('myDirective', [
'$compile', function($compile) { // Crucial Part
return {
scope: true,
compile: function(element, attrs) {
element.attr('ng-src', '{{imageModel}}');
element.attr('ng-click', 'updateImage()');
element.removeAttr('my-directive'); // Crucial Part
return {
pre: function(scope, ele, attb) {},
post: function(scope, ele, attb) {
$compile(ele)(scope);
return scope.updateImage = function() {
return scope.imageModel = "http://www.google.com/logos/doodles/2015/halet-cambels-99th-birthday-6544342839721984-hp2x.png";
};
}
};
},
controller: function($scope, $element, $attrs) {
return $scope.imageModel = null;
}
};
}
]);
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
<style>
img {
max-width: 100%;
}
</style>
</head>
<body ng-app='App'>
<img src="https://www.google.co.in/images/srpr/logo11w.png" alt="" my-directive>
</body>
</html>
我将解释其中涉及的必要步骤。
第一阶段(编译):-
通过
在此阶段添加您想要的核心angular指令或自定义指令
element.attr('ng-src', '{{imageModel}}'); // For dynamic image url changes
element.attr('ng-click', 'updateImage()'); // The trigger to update image
element.removeAttr('my-directive'); // **Crucial step please remove your custom directive attribute**
如果您在 $compile() 期间不删除自定义指令,它将无限循环
第二阶段(控制器):-
定义所有需要的模型并在这些阶段运行(我知道我已经在 postLink 中定义了 updateImage() 。它也有效!)
$scope.imageModel = null // 初始化
第三期(link):-
顺序是先 preLink ,然后 postLink 。
我没有在 prelink.
中定义任何东西
postLink :- $compile(element)(scope)。这实际上将绑定编译元素中涉及的所有指令,并动态绑定它们。(vola)。一切都按预期工作。
谢谢。如果您觉得我遗漏了一些要点或误解了这个概念,请随时更新它。
JSBin link https://jsbin.com/parote/edit?html,js,output
您好,我正在处理需要编辑的指令 DOM 添加 ng-src 属性和模型。
这是我的DOM
<edit-component>
<img src="images/logo.png" title="Hearty Wear" />
</edit-component>
我需要结果 DOM 是
`<div>
<img src="images/logo.png" title="Hearty Wear" ng-src={{myModel}} />
</div> `
这样当我用数据更新 myModel 时图像应该更新
更新
sam.directive('editComponent', function() {
return {
restrict: 'EA',
transclude: true,
replace: true,
templateUrl: "imageTemplate.html",
link: function(scope, element, attb, ctrl, transclude) {
scope.data = function() {
var imagedata;
imagedata = arguments[5];
scope.imageModel = imagedata.base64;
return element.find('img').attr('src', "data:image/png;base64," + imagedata.base64);
};
}
};
});
我还需要以前的 src 属性值来显示现有图像。
现在我正在更新 src 属性 manually.I 需要解决方案,我可以通过 model 变量
谢谢
尝试
<img ng-if="!myModel" src="images/logo.png" title="Hearty Wear"/>
<img ng-if="myModel" src="{{ myModel }}" title="Hearty Wear"/>
在大量阅读各种博客和网站中有关 AngularJS 指令的文档之后。
我刚刚了解完整的指令流程
流量将来自
Compile -> Controller -> preLink -> postLink or (Link)
如果您想在编译阶段[添加angular(ng-model, ng-style,ng-src)的任何核心指令
var app;
app = angular.module('App', []);
app.directive('myDirective', [
'$compile', function($compile) { // Crucial Part
return {
scope: true,
compile: function(element, attrs) {
element.attr('ng-src', '{{imageModel}}');
element.attr('ng-click', 'updateImage()');
element.removeAttr('my-directive'); // Crucial Part
return {
pre: function(scope, ele, attb) {},
post: function(scope, ele, attb) {
$compile(ele)(scope);
return scope.updateImage = function() {
return scope.imageModel = "http://www.google.com/logos/doodles/2015/halet-cambels-99th-birthday-6544342839721984-hp2x.png";
};
}
};
},
controller: function($scope, $element, $attrs) {
return $scope.imageModel = null;
}
};
}
]);
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
<style>
img {
max-width: 100%;
}
</style>
</head>
<body ng-app='App'>
<img src="https://www.google.co.in/images/srpr/logo11w.png" alt="" my-directive>
</body>
</html>
我将解释其中涉及的必要步骤。
第一阶段(编译):-
通过
在此阶段添加您想要的核心angular指令或自定义指令 element.attr('ng-src', '{{imageModel}}'); // For dynamic image url changes
element.attr('ng-click', 'updateImage()'); // The trigger to update image
element.removeAttr('my-directive'); // **Crucial step please remove your custom directive attribute**
如果您在 $compile() 期间不删除自定义指令,它将无限循环
第二阶段(控制器):-
定义所有需要的模型并在这些阶段运行(我知道我已经在 postLink 中定义了 updateImage() 。它也有效!)
$scope.imageModel = null // 初始化
第三期(link):- 顺序是先 preLink ,然后 postLink 。 我没有在 prelink.
中定义任何东西postLink :- $compile(element)(scope)。这实际上将绑定编译元素中涉及的所有指令,并动态绑定它们。(vola)。一切都按预期工作。
谢谢。如果您觉得我遗漏了一些要点或误解了这个概念,请随时更新它。
JSBin link https://jsbin.com/parote/edit?html,js,output