AngularJS - 组件内的指令未正确绑定内容
AngularJS - Directive inside a component doesn't bind stuff correctly
我重新设计了一个指令作为组件。我遇到的问题是我的指令包含另一个指令,该指令确实处理在父指令中触发的事件。在我将父指令声明更改为组件之前,所有东西都运行良好。看看:
指令:
app.directive("fileChange", function () {
return {
restrict: 'A',
scope: {
fileChange: '&'
},
link: function(scope, element) {
element.on('change', onChange);
scope.$on('destroy', function () {
element.off('change', onChange);
});
function onChange() {
scope.$apply(function () {
scope.fileChange();
});
}
}
};
});
组件:
app.component('myComponent', {
templateUrl: 'myComponent.html',
bindings: {
imgSource: '@imgSrc'
},
controller: () => {
function upload() {
// doing something
}
this.upload = upload;
}
});
模板:
<div>
<img alt="image" class="img-preview" ng-src="{{$ctrl.imgSource}}"/>
<label class="btn">
<input type="file" accept="image/jpeg" file-change="$ctrl.upload();"/>
Choose image
</label>
</div>
等等,似乎 $ctrl.upload()
不会触发事件或类似事件。我做错了什么?
这应该有效
app.component('myComponent', {
templateUrl: 'myComponent.html',
bindings: {
imgSource: '@imgSrc'
},
controller: function () {
function upload() {
// doing something
}
this.upload = upload;
}
});
问题是你如何使用箭头函数短语法,看看 documentation
如果你想使用短语法,可以是
controller() {
},
但以下语法适用于具有 return 语句的函数
elements.map(function(element) {
return element.length;
}); // [8, 6, 7, 9]
elements.map(element => {
return element.length;
}); // [8, 6, 7, 9]
虽然您 return 控制器中没有任何内容,因此它作为组件控制器没有传递任何内容
我重新设计了一个指令作为组件。我遇到的问题是我的指令包含另一个指令,该指令确实处理在父指令中触发的事件。在我将父指令声明更改为组件之前,所有东西都运行良好。看看:
指令:
app.directive("fileChange", function () {
return {
restrict: 'A',
scope: {
fileChange: '&'
},
link: function(scope, element) {
element.on('change', onChange);
scope.$on('destroy', function () {
element.off('change', onChange);
});
function onChange() {
scope.$apply(function () {
scope.fileChange();
});
}
}
};
});
组件:
app.component('myComponent', {
templateUrl: 'myComponent.html',
bindings: {
imgSource: '@imgSrc'
},
controller: () => {
function upload() {
// doing something
}
this.upload = upload;
}
});
模板:
<div>
<img alt="image" class="img-preview" ng-src="{{$ctrl.imgSource}}"/>
<label class="btn">
<input type="file" accept="image/jpeg" file-change="$ctrl.upload();"/>
Choose image
</label>
</div>
等等,似乎 $ctrl.upload()
不会触发事件或类似事件。我做错了什么?
这应该有效
app.component('myComponent', {
templateUrl: 'myComponent.html',
bindings: {
imgSource: '@imgSrc'
},
controller: function () {
function upload() {
// doing something
}
this.upload = upload;
}
});
问题是你如何使用箭头函数短语法,看看 documentation
如果你想使用短语法,可以是
controller() {
},
但以下语法适用于具有 return 语句的函数
elements.map(function(element) {
return element.length;
}); // [8, 6, 7, 9]
elements.map(element => {
return element.length;
}); // [8, 6, 7, 9]
虽然您 return 控制器中没有任何内容,因此它作为组件控制器没有传递任何内容