我正在努力完成看起来应该是一项简单的任务,但我感到难过。
这是我能提出的最简单的例子。
<html lang="en" data-ng-app="myApp">
<head>
<script src="js/angular.js"></script>
<script>
var test = 'Hello World';
var myApp = angular.module("myApp", []);
myApp.controller("myCtrl", function ($scope) {
$scope.testStr = test;
});
myApp.run(function($http){
test = 'scope updates';
$http.get("controllers/getTestStr.jsp").success(function (data) {
//console.log('returned');
test = 'scope does not update';
});
});
</script>
</head>
<body ng-controller="myCtrl" style="padding:10px;">
<p>{{testStr}}</p>
</body>
</html>
基本上我正在初始化一个名为test的变量并将变量绑定到testStr
范围。如果我在run()
更新测试变量,则视图中的testStr更新。但是如果我通过$http.get
请求更新同一个变量,那么视图永远不会更新。为什么是这样?完成此任务的最佳方法是什么?
非常感谢任何启示。
Anguar v1.2.16
答案 0 :(得分:2)
我认为您的问题与Angular无关。 test
和testStr
只是普通的旧JavaScript字符串,因此当您将其设置为等于新字符串时,它会创建一个新变量,而不会影响任何其他变量。如果您希望多个变量引用相同的字符串,则必须将其放在对象中。 e.g:
var a = {str: 'my string'}
var b = a;
b.str = 'new string';
//now a.str and b.str both equal 'new string'
您看到run()
块中所做更改的唯一原因是它在$scope.testStr = test;
之前执行