无法在指令控制器中访问指令的范围对象

时间:2017-01-13 10:13:12

标签: javascript angularjs angularjs-directive controller angularjs-scope

MaterialIn.directive.js

angular.module('mdt')
    .directive('mdtMaterialins', materialInsDirective);

function materialInsDirective() {
    return {
        restrict: 'E',
        scope: {
            materialoffers: '=',

        },
        bindToController: true,
        templateUrl: 'app/materialOffers/materialIns/materialIns.html',
        controllerAs: 'materialInsVm',
        controller: MaterialinsController
    };
}
function MaterialinsController($scope) {
    var vm = this;
console.log(vm);  //shows the materialoffers object present
console.log(vm.materialoffers);  //show undefined

}

大家好。我做了一个指令并发送了一系列对象" materialoffers",我可以在html页面上访问它工作正常,但是为什么我无法在控制器内访问它,它显示未定义,任何人都可以告诉我一种方法,我可以在控制器内使用该材料,我想得到它的长度,并将其存储在这样的$ scope变量

vm.total=vm.materialoffers.length;

1 个答案:

答案 0 :(得分:0)

似乎SharePoint:SPSecurityTrimmedControl变量可能在$ http调用或类似之后得到它的值,因为它在创建指令时不会立即获得值。 materialoffers显示变量,因为它在您单击时显示对象的状态(在本例中为vm)。您可以使用浏览器控制台中的以下代码测试此现象:

console.log(vm)

如果你在10秒钟之前点击了该对象,它就不会拥有该属性,但是在10秒后点击它后,你会在那里看到添加的属性。

尝试用以下代码替换您的控制器代码:

var object = {};
object; // logs the object in console, shows an empty object
window.setTimeout(function() {
    object.testValue = "test value"
}, 10000) // After 10 seconds, the object will get the property testValue