Angularjs Can';在“$http.get”请求中,不要放弃“$scope”,而选择“this”
EDIT2:Angularjs Can';在“$http.get”请求中,不要放弃“$scope”,而选择“this”,angularjs,Angularjs,EDIT2: var LanguageCtrl; LanguageCtrl = function($scope, $http, $window) { var vm; vm = this; if ($window.navigator.language.indexOf('it') !== -1) { this.lang = 'it'; this.setLanguage = 'it'; } else { this.lang = 'en'; this.s
var LanguageCtrl;
LanguageCtrl = function($scope, $http, $window) {
var vm;
vm = this;
if ($window.navigator.language.indexOf('it') !== -1) {
this.lang = 'it';
this.setLanguage = 'it';
} else {
this.lang = 'en';
this.setLanguage = 'us';
}
this.message = [];
this.pizze = [];
this.getPizze = function(lang) {
$http.get('localization/pizze-' + lang + '.json').success(function(pizze) {
vm.pizze = pizze;
});
};
this.setLanguage = function(lang) {
$http.get('localization/' + lang + '.json').success(function(data) {
vm.lang = lang;
vm.message = data;
vm.getPizze(vm.lang);
$window.location.href = '#!/order';
});
};
this.setLanguage(this.lang);
};
angular.module('myApp').controller('LanguageCtrl', LanguageCtrl);
编辑:我所说的不起作用,当我使用
这个
而不是$scope
时就不起作用了
我将以语法转到控制器,当我对变量执行此操作时,一切都很好,但是当我对由$http.get
填充的数组尝试相同的操作时,代码中断
不要在意那种可怕的
,只想测试代码延迟链接的样式
控制器
var LanguageCtrl;
LanguageCtrl = function($scope, $http, $window) {
if ($window.navigator.language.indexOf('it') !== -1) {
this.lang = 'it';
this.setLanguage = 'it';
} else {
this.lang = 'en';
this.setLanguage = 'us';
}
this.message = [];
this.pizze = [];
$scope.getPizze = function(lang) {
$http.get('localization/pizze-' + lang + '.json').success(function(pizze) {
$scope.pizze = pizze;
});
};
$scope.setLanguage = function(lang) {
$http.get('localization/' + lang + '.json').success(function(data) {
this.lang = lang;
$scope.message = data;
$scope.getPizze(this.lang);
$window.location.href = '#!/order';
});
};
$scope.setLanguage(this.lang);
};
angular.module('myApp').controller('LanguageCtrl', LanguageCtrl);
index.html工作正常
<html ng-app="myApp" ng-controller="LanguageCtrl as langctrl" lang="{{langctrl.lang}}">
order.html没有
<button onclick="location.href='#!/cart'" ng-disabled="howManyPizze === 0">{{langctrl.message.cart}} {{howManyPizze === 0 ? langctrl.message.empty : '(' + howManyPizze + ')'}}</button>
<button onclick="location.href='#!/'">{{langctrl.message.change}}</button>
{{langctrl.message.cart}{{howManyPizze==0?langctrl.message.empty:'('+howManyPizze+')}
{{langctrl.message.change}
使用上述代码来处理角度代码
在此处创建Plukar问题在于,当您的$http.get()
解决时,此
的自引用不可用。这就是为什么您经常会看到var vm=this当使用“controller as”语法时,code>或类似于控制器中第一行的内容。通过将此
分配给控制器中的局部变量,您可以在承诺解决时访问该变量。简言之,添加
var vm = this;
…连接到控制器,然后将$http.get()
更改为此
vm.setLanguage = function(lang) {
$http.get('localization/' + lang + '.json').success(function(data) {
vm.lang = lang;
vm.message = data;
vm.getPizze(vm.lang);
$window.location.href = '#!/order';
});
};
更新
我在最初的回答中遗漏了这一点:
$scope.getPizze = function(lang) {
$http.get('localization/pizze-' + lang + '.json').success(function(pizze) {
$scope.pizze = pizze;
});
};
需要对其进行更改以消除$scope
的使用
vm.getPizze = function(lang) {
$http.get('localization/pizze-' + lang + '.json').success(function(pizze) {
vm.pizze = pizze;
});
};
嗯,也许我的问题写得不好。如何从$scope
切换到this
。在这种情况下,我不能使用this
而不是$scope
?因为如果我从message.value中删除langctrl,我的代码将更新。请确认它是否工作。我使用example.json文件提供服务。您可以使用自己的。我感谢您的帮助,但我是在问如何摆脱$scope
,就像在另一个答案中一样消息
起作用,但似乎我无法呼叫getPizze
。问题更新为您的建议,我做了什么不好?那是我的不好-我错过了在将该函数添加到控制器时您仍在使用$scope
。我的答案已经更新了。我建议在使用var vm=this
您只需在任何地方使用vm
来代替this
。混合使用这两个标识符看起来很奇怪,也许这有助于在代码中更清楚地使用单个标识符。我已经更改了它(事实上它在我的edit2中),但我的ngRepeat不起作用。。。然后我想起了“Controller as”语法,一切都很好:D谢谢!
vm.getPizze = function(lang) {
$http.get('localization/pizze-' + lang + '.json').success(function(pizze) {
vm.pizze = pizze;
});
};