重构我的AngularJS代码以使用“控制器为”语法后,我无法获得我的一个指令。AngularJS:“控制器为”的语法和指令
旧的工作代码(Fiddle):
<div ng-app='MyModule'>
<div ng-controller='DefaultCtrl'>
<input auto-complete ui-items="names" ng-model="selected"/>
selected = {{selected}}
</div>
</div>
JS:
function DefaultCtrl($scope) {
$scope.names = ["john", "bill", "charlie"];
}
angular.module('MyModule', []).directive('autoComplete', function($timeout) {
return function(scope, iElement, iAttrs) {
iElement.autocomplete({
source: scope[iAttrs.uiItems],
select: function() {
$timeout(function() {
iElement.trigger('input');
}, 0);
}
});
};
});
这里是我的非工作(自动完成建议不会出现)与 “控制器”(Fiddle)版本:
<div ng-app='MyModule'>
<div ng-controller='DefaultCtrl as ctrl'>
<input auto-complete ui-items="ctrl.names" ng-model="ctrl.selected"/>
selected = {{ctrl.selected}}
</div>
</div>
JS:
function DefaultCtrl() {
this.names = ["john", "bill", "charlie"];
}
angular.module('MyModule', []).directive('autoComplete', function($timeout) {
return function(scope, iElement, iAttrs) {
iElement.autocomplete({
source: scope[iAttrs.uiItems],
select: function() {
$timeout(function() {
iElement.trigger('input');
}, 0);
}
});
};
});
你在哪里注册你的控制器角?我缺少类似“angular.module('MyModule',[]) .controller('DefaultCtrl',DefaultCtrl);” – John 2014-10-19 15:56:47
@John如果是这样的话,原代码将不会工作。所以它很清楚,但OP选择不在这里展示,因为它是无关紧要的。 – Shomz 2014-10-19 16:06:52
@Shomz你说得对,我很抱歉。 – John 2014-10-19 16:09:40