控制器之间通过$ window.location.href进行通信

时间:2016-06-10 21:43:08

标签: angularjs

我在控制器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;
      };

1 个答案:

答案 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来连接它们。