我在控制器1中有以下声明:
$scope.field1 = "abcd";
$window.location.href = 'main.html';
然后,在main.html
我有控制器2,并且需要访问field1的值。
这是否可以使用服务或工厂,因为$window.location.href
将取代范围?在这种情况下,$ broadcast / $ emit会工作吗?
更新
我尝试使用单例服务调用控制器1中的set
和控制器2中的get
,但控制器2中的变量仍然为空
app.service('singleton', function() {
var myField1 = null;
this.set = function(f) {
myField1 = f;
};
this.get = function() {
return myField1;
};
答案 0 :(得分:1)
如果您有2个不同的页面,例如:
<html>
page1
</html>
<html>
page2
</html>
然后它们是完全独立的,因此角度将在page1和page2中单独加载 - 你不能在它们之间建立javascript连接。更改url时,所有js对象都会被丢弃。所以你可以使用param page1.html?param = value,cookies,localStorage(2个同一域的最新版本)。
这就是为什么大多数角度应用程序都是一个页面 - 您可能会在URL中看到不同的路径,但这仍然只是一个页面(即index.html)。在这种情况下,您可以使用角度服务,$ rootScope(实际上也只是另一个服务)或在ui-router中使用params来连接它们。