【发布时间】:2014-06-22 00:40:23
【问题描述】:
当$scope.instrumentNames 像提供的代码一样在控制器内部设置时它可以工作
当$scope.instrumentNames 在 HTTP success 函数中设置时,它不起作用
http 函数返回的数据是一个数组。
Console.log(data)//["Guitar", "Bass", "Violin"]
Console.log($scope.instrumentNames) //["Guitar", "Bass", "Violin"]
控制器
app.controller("PrivateProfileController",
["$scope", "$http", "$routeParams", function( $scope, $http, $routeParams ) {
$scope.instrumentNames = ["Guitar", "Bass", "Violin"];//WORKING !
function loadInstrumentNames(){
$http({
url: '/Instrument/getInstrumentsName',
method: "GET"
}).success(function(data){
//data = ["Guitar", "Bass", "Violin"]
$scope.instrumentNames = data;//NOT WORKING
});
}
loadInstrumentNames()
}]
);
指令
app.directive('autoComplete', [function($timeout) {
return {
restrict: "A",
link : function(scope, element, attrs) {
element.autocomplete({
source: scope[attrs.uiItems],
select: function() {
$timeout(function() {
element.trigger('input');
}, 200);
}
});
}
};
}]);
模板
<input auto-complete ui-items="instrumentNames">
就像在 http success 完成之前调用指令一样。我被这个问题困住了,任何帮助或建议将不胜感激!
谢谢
【问题讨论】:
-
你的成功回调说
instrumentCodes -
打错字了..问题是一样的,这里提供的代码不是复制/粘贴
-
问题可能是您的请求完成之前从范围读取的指令。您的指令需要绑定到父范围并检查其更改。 stackoverflow.com/questions/14050195/…
标签: javascript angularjs