什么时候会触发摘要周期?

时间:2015-06-16 16:18:05

标签: javascript angularjs

我遇到一个小问题,我正在使用像

这样的路线
.when('/beta/profiles/new', {
  controller: 'ProfilesController',
  controllerAs: 'vm',
  templateUrl: 'profiles/new.html',
  resolve: {
    action: function() { return "new"; }
  }
})
.when('/beta/profiles/index', {
  controller: 'ProfilesController',
  controllerAs: 'vm',
  templateUrl: 'profiles/index.html',
  resolve: {
    action: function() { return "index"; }
  }
})

现在我的控制器里有这样的东西:

function ProfilesController(profileService, action) {
  var vm = this,
      permittedActions = ["index", "new"];
  var actions = {
    index: function() {
      vm.hideProfile = {
        currentProfile: null,
        showModal: false,
        setCurrentProfile: function(profile_id) { this.currentProfile = profile_id },
        toggleHide: function() {/*...*/}
      }
      profileService.all().then(function(data) {
        vm.profiles = data.result;
      })
    },
    new: {/*.. */}
  }
  if(permittedActions[action] > -1) actions[action]();
}

现在我的问题是,如果我连续多次点击一个链接(在标题中,让我们说),每次我点击profiles/index.html它应该重新初始化所有内容吗?

如果我想利用角度的脏检查功能,我应该将vm.hideProfile放在index函数之外吗?如果我这样做,我也不应该对vm.profiles = [];?

做同样的事情

如何/我该怎么做才能检查变量是否被重新初始化并且角度的脏检查没有发挥作用,或者它只是常识!或者我应该为每个动作设置一个单独的控制器?

并且在重新初始化的情况下,有没有更好的方法,以便我可以将hideProiles保留在索引中,因为我真的不需要我的新动作和显示动作来了解hideProfile,因为它不必要吗?

1 个答案:

答案 0 :(得分:0)

希望能提供帮助的一些事情:

  1. 对于绑定到活动$ scope(和$ rootScope)的对象进行脏检查。 https://docs.angularjs.org/guide/scope

  2. 要在控制器中使用$ scope,(a)注入它。例如ProfilesController($ scope,profileService,action),(b)把东西放在上面,例如: $ scope.vm = vm;

  3. 查看你的代码,原始初始化应该超级快。

  4. 不要认为javascript是安全的。如果安全性是您应用的真正关注点,请在服务器上进行保护。

  5. 最后在app arch上,因为angular是MVC框架:在控制器中定义函数,并通过$ scope将它们连接到视图中的操作。例如

    $scope.index = function() { // do stuff 
      if (action !== "index") {return}; // disallowed by route
      //continue
    }