search

Home  >  Q&A  >  body text

javascript - angularjs什么时候渲染model变量?

我有这样一个需求:ChartController会生成变量,将数值赋给p的id,然后GraphController中用到p的id变量,但是GraphController中的方法需要p的id已被渲染才行。

<p ng-controller="ChartController">
  <p ng-repeat="id in chart.id">
    <p id="{{ id.value }}" ng-controller="GraphController"><p>
  <p>
</p>

如果GraphController的xx方法被调用的时候,我查看前端的代码,p的id名称还是

<p id="{{ id.value }}"...

去除ng-controller="GraphController"后,发现p的id渲染正确

<p id="abc123"...

很奇怪!

大家讲道理大家讲道理2827 days ago597

reply all(3)I'll reply

  • ringa_lee

    ringa_lee2017-04-10 13:13:45

    我不建议将angular的模板语言直接放在id或者class这些属性里,可以用ng-class,ng-href,ng-src这些属性代替。

    angular里的controller不是类,不能用类似楼主那样的方法直接从一个controller里新建多个类并传值给它们。

    楼主需要的是directive

    <p ng-controller="ChartController">
      <p ng-repeat="id in chart.id">
        <graph graph-id="id.value"></graph>
      <p>
    </p>
    
    app.directive("graph",function(){
        return {
            template: '<p>{{id}}</p>',
            scope:{
                //注意这里
                //如果是'@graphId'的话,则返回的是字符串"id.value"
                //graphId对应的html属性为"graph-id"
                id:'=graphId'
            },
            restrict:'E',
            controller:function($scope){
                console.log($scope.id);
                //abc123
    
                //将GraphController的代码放在这里
            }
        }
    })
    

    http://plnkr.co/edit/M1gtlySErXvSOgQayxF6?p=preview

    关于directive,看这里

    reply
    0
  • 迷茫

    迷茫2017-04-10 13:13:45

    http://plnkr.co/edit/5JSoltju6h9tmRTmS2SE?p=preview
    没看出来啥问题。。你是如何调用id的。。

    reply
    0
  • 阿神

    阿神2017-04-10 13:13:45

    ng-controller会开个新的scope

    reply
    0
  • Cancelreply