Angular UI Router:UI父控制器在值更改时不会更新

时间:2015-11-23 09:24:24

标签: angularjs angular-ui-router

我有以下问题:

我有两种状态,定义如下:

  state('home', {
        url: '/home',
        templateUrl: 'home/Home.html',
       controller: 'HomeController as hc'
   }).state('home.index', {
       url: '/index',
       templateUrl: 'index/Index.html',
       controller: 'IndexController as ic'
   })

在HomeController中,我在导航栏中定义了负责我的标题的值,该值存储在服务中:

this.title = Service.getTitle();

这是我导航栏中的标题。当我将状态更改为索引时,我设置了新标题:

this.title = Service.updateTitle("Index")

但是,这不会更改导航栏的标题。

服务有一个变量title和两个函数:

getTitle(){
        return this.title;
    }

updateTitle(newTitle){
        this.title = newTitle;
        return;
    }

关于我做错什么的任何想法?

3 个答案:

答案 0 :(得分:1)

好的,所以这个问题的答案有点棘手。如果你不使用boolean或string这样的原语绑定它,那么使用serivce绑定效果很好。我所要做的就是改变标题的结构。我把它改成了对象,它看起来如下:

    title:{
     name: "Name"
    }

这将有效。您需要知道的是,如果数据类型是基元,则绑定不会更新。它必须是对象,或者你必须设置事件或监视:)

答案 1 :(得分:0)

当你更新你的标题时,你说this.title = Service.updateTitle(“Index”);

这样就可以更改绑定,因为updateTitle不返回任何内容。

只说没有左手的Service.updateTitle(“Index”)。

答案 2 :(得分:0)

如果您尝试记录存储在服务中的数据并且切换视图时存储的数据是正确的,那么在状态更改时如何更新模板中的标题肯定有问题,那么您是否尝试过像广播事件那样的事情你的导航栏指令或控制器知道吗?像:

$rootScope.$broadcast("updateTitleEvent", newTitle);

并捕获导航栏指令或控制器

$scope.$on("updateTitleEvent", function (event, newTitle) {
    // Update title goes here
    $scope.title = newTitle;
});

您可能希望将模板和控制器代码放在帖子中。希望这有帮助