【问题标题】:ng-include doesn't render partial view everytime using $scopeng-include 不会每次使用 $scope 渲染部分视图
【发布时间】:2015-09-21 20:11:12
【问题描述】:

内部视图我使用 ng-include 和 ng-if 有条件地呈现 html

 <div ng-controller="myController">
        <div ng-if="myProperty == 1">
            <div ng-include="'view1.html'"></div>
        </div>
        <div ng-if="myProperty == 2">
            <div ng-include="'view2.html'"></div>
        </div>
 </div>

在控制器内部我有 $scope.myProperty,它使用来自其他 js 对象的 $scope 注入在控制器内部接收值。在这个控制器上,我还有回调函数,它每 x 秒更新一次 $scope.myProperty。

app.controller('myController', function ($scope) {
   ...
        $scope.myProperty = 0; //init value
        function callback() {
            $scope.$apply(); // force update view
            // correctly write myProperty value on every data change
            console.log($scope.myProperty); 
        }
    var otherJsObject= new myObject($scope, callback);
    otherJsObject.work();
   ...
}

回调函数正确更改myProperty 值,但它不会每次都更新内部视图。

更新: $scope.bindUIProp = { a: $scope.myProperty};

    function callback() {
        $scope.$apply(); 
        $scope.bindUIProp.a = $scope.myProperty;            
        console.log('Callback  ' + $scope.myProperty);
        console.log('drawstage  ' + $scope.bindUIProp.a);

    }

    var otherJsObject= new myObject($scope, callback);
    otherJsObject.work();

在内部视图中我使用了对象属性

<div ng-controller="myController">
            <div ng-if="bindUIProp.a == 1">
                <div ng-include="'view1.html'"></div>
            </div>
            <div ng-if="bindUIProp.a == 2">
                <div ng-include="'view2.html'"></div>
            </div>
     </div>

这种方法在每次刷新页面时都有效,当 scope.bindUIProp.a 更改为 2 时,parial view 不会从 view1 更新到 view2。

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

而不是在根级别写入属性。在下面写一层。

而不是 $scope.myProperty,

使用 $scope.mp.myProperty

【讨论】:

    【解决方案2】:

    ng-ifng-include 都创建子作用域。

    由于在主范围内使用原语,您遇到了问题。基元没有继承,因此绑定在嵌套的子范围内被破坏。

    把它改成一个对象:

    $scope.myProperty = { someProp: 0};
    

    我个人很少使用ng-include,因为它创建了子作用域。如果我只想包含一个模板,我更喜欢有自己的指令。

    【讨论】:

    • 谢谢,我会试试这个。那么 ng-include 是否有替代方案?
    • 使用角度指令
    • @JayJayJay 同意...但请记住 ng-include 也是一个指令,只是一个内置指令
    • 哦,谢谢 :)。应该多读一些,这样我的 cmets 才能更精确
    • 即使您要使用自定义指令,正如 charlie 所提到的,最好的做法是使用对象来包围您绑定的属性,尤其是您正在绑定到该属性并要更改属性
    猜你喜欢
    • 2015-05-31
    • 2017-06-30
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多