这个 AngularJS 指令有什么问题?
What is wrong with this AngularJS directive?
我正在尝试为 AngularJS 编写一个 imgix 指令。这是我的代码:
MetronicApp
.directive('imgix', function() {
return {
replace: true,
scope: {
url: '='
},
restrict: "A",
template: "<img class='thumbnail inline' width={{w}} height={{h}} src='https://mysite.imgix.net/{{url}}?h={{h}}&w={{w}}&fit=crop'>",
link: function(scope, elm, attrs) {
function ctrl(value, mode) {
// check inputs
if ((value === null) || (value === undefined) || (value === '')) {
// let's do nothing if the value comes in empty, null or undefined
return;
}
scope.h = attrs.height || 50;
scope.w = attrs.width || 50;
scope.url = value;
}
// by default the values will come in as undefined so we need to setup a
// watch to notify us when the value changes
scope.$watch(attrs.url, function(value) {
ctrl(value, 'url');
});
}
};
});
在 html 中,我有 2 张图片:
<img imgix data-height="200" data-width="200" url="theme.options.homepageBackground" />
<img imgix data-height="200" data-width="200" url="theme.options.menuBackground" />
但是结果如图:
我不明白哪里出了问题。有关于范围的东西吗?
我建议使用 ng-src 属性并将整个 url 从 link 函数传递给指令。
您的指令范围绑定到父范围。请改用子作用域或独立作用域。
MetronicApp.directive('imgix', function() {
return {
scope: {
url: '='
}
我结合 Matthias 和 Julien 解决了这个问题
首先,我在指令中添加了大括号:
<imgix data-height="200" data-width="200" url="{{theme.options.menuBackground}}" />
然后我在指令代码中添加了 scope: {}
而且我在手表代码 returns 中看到该值未定义。我改变了:
scope.$watch(attrs.url, function(value) {
ctrl(attrs.url, 'url');
});
现在可以了。谢谢。
我正在尝试为 AngularJS 编写一个 imgix 指令。这是我的代码:
MetronicApp
.directive('imgix', function() {
return {
replace: true,
scope: {
url: '='
},
restrict: "A",
template: "<img class='thumbnail inline' width={{w}} height={{h}} src='https://mysite.imgix.net/{{url}}?h={{h}}&w={{w}}&fit=crop'>",
link: function(scope, elm, attrs) {
function ctrl(value, mode) {
// check inputs
if ((value === null) || (value === undefined) || (value === '')) {
// let's do nothing if the value comes in empty, null or undefined
return;
}
scope.h = attrs.height || 50;
scope.w = attrs.width || 50;
scope.url = value;
}
// by default the values will come in as undefined so we need to setup a
// watch to notify us when the value changes
scope.$watch(attrs.url, function(value) {
ctrl(value, 'url');
});
}
};
});
在 html 中,我有 2 张图片:
<img imgix data-height="200" data-width="200" url="theme.options.homepageBackground" />
<img imgix data-height="200" data-width="200" url="theme.options.menuBackground" />
但是结果如图:
我不明白哪里出了问题。有关于范围的东西吗?
我建议使用 ng-src 属性并将整个 url 从 link 函数传递给指令。
您的指令范围绑定到父范围。请改用子作用域或独立作用域。
MetronicApp.directive('imgix', function() {
return {
scope: {
url: '='
}
我结合 Matthias 和 Julien 解决了这个问题
首先,我在指令中添加了大括号:
<imgix data-height="200" data-width="200" url="{{theme.options.menuBackground}}" />
然后我在指令代码中添加了 scope: {}
而且我在手表代码 returns 中看到该值未定义。我改变了:
scope.$watch(attrs.url, function(value) {
ctrl(attrs.url, 'url');
});
现在可以了。谢谢。